延迟消息交换
版本 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()
方法。
它是一个单独的属性,以避免意外地将延迟从输入消息传播到生成的输出消息。