跳到主要内容

延迟消息交换

DeepSeek V3 中英对照 Delayed Message Exchange

版本 1.6 引入了对 Delayed Message Exchange Plugin 的支持

备注

该插件目前标记为实验性,但已经可用超过一年(截至撰写时)。如果插件的更改使得有必要,我们计划尽快添加对这些更改的支持。因此,Spring AMQP 中的此支持也应被视为实验性的。此功能已在 RabbitMQ 3.6.0 和插件的 0.0.1 版本中进行了测试。

要使用 RabbitAdmin 将交换器声明为延迟交换器,你可以在交换器 bean 上将 delayed 属性设置为 trueRabbitAdmin 会使用交换器类型(如 DirectFanout 等)来设置 x-delayed-type 参数,并将交换器声明为 x-delayed-message 类型。

delayed 属性(默认值:false)在通过 XML 配置 exchange bean 时也可用。以下示例展示了如何使用它:

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

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

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

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

});
java

要检查消息是否延迟,可以在 MessageProperties 上使用 getReceivedDelay() 方法。这是一个独立的属性,以避免将延迟信息无意中传播到由输入消息生成的输出消息中。