跳到主要内容
版本:4.1.1

延迟消息交换机

Doubao 中英对照 Delayed Message Exchange

1.6 版本引入了对延迟消息交换机插件的支持

备注

该插件目前被标记为实验性,但(截至撰写本文时)已经发布一年多了。如果插件的变更使我们有必要这样做,我们计划尽快为这些变更添加支持。因此,Spring AMQP 中的这项支持也应被视为实验性。此功能已在 RabbitMQ 3.6.0 和该插件的 0.0.1 版本上测试过。

要使用 RabbitAdmin 将交换机声明为延迟交换机,你可以将交换机 bean 的 delayed 属性设置为 true。RabbitAdmin 会使用交换机类型(Direct、Fanout 等)设置 x-delayed-type 参数,并以 x-delayed-message 类型声明该交换机。

使用 XML 配置交换机 bean 时,也可以使用 delayed 属性(默认值:false)。下例展示了如何使用它:

<rabbit:topic-exchange name="topic" delayed="true" />

要发送延迟消息,你可以通过 MessageProperties 设置 x-delay 头,如下例所示:

MessageProperties properties = new MessageProperties();
properties.setDelay(15000);
template.send(exchange, routingKey,
MessageBuilder.withBody("foo".getBytes()).andProperties(properties).build());
rabbitTemplate.convertAndSend(exchange, routingKey, "foo", new MessagePostProcessor() {

@Override
public Message postProcessMessage(Message message) throws AmqpException {
message.getMessageProperties().setDelay(15000);
return message;
}

});

要检查消息是否被延迟过,可使用 MessageProperties 上的 getReceivedDelay() 方法。它是一个独立属性,以避免从输入消息生成的输出消息意外传播该值。