对于最新的稳定版本,请使用 Spring AMQP 3.2.6! |
延迟消息交换
1.6 版引入了对延迟消息交换插件的支持
该插件目前被标记为实验性插件,但已经可用一年多(在撰写本文时)。如果对插件的更改是必要的,我们计划尽快添加对此类更改的支持。因此,Spring AMQP 中的这种支持也应该被视为实验性的。此功能在 RabbitMQ 3.6.0 和插件的 0.0.1 版本中进行了测试。 |
要使用RabbitAdmin
要将交换声明为延迟,您可以将delayed
交换 bean 上的属性设置为true
.
这RabbitAdmin
使用交换类型 (Direct
,Fanout
,依此类推)将x-delayed-type
参数和声明具有类型x-delayed-message
.
这delayed
属性(默认:false
) 在使用 XML 配置 Exchange Bean 时也可用。以下示例显示如何使用它:
<rabbit:topic-exchange name="topic" delayed="true" />
要发送延迟消息,您可以将x-delay
header 通过MessageProperties
,如以下示例所示:
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;
}
});
要检查消息是否延迟,请使用getReceivedDelay()
方法MessageProperties
. 它是一个单独的属性,用于避免意外传播到从输入消息生成的输出消息。