此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring AMQP 3.2.6spring-doc.cadn.net.cn

延迟消息交换

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

要使用RabbitAdmin要将交换声明为延迟,您可以将delayed交换 bean 上的属性设置为true. 这RabbitAdmin使用交换类型 (Direct,Fanout,依此类推)将x-delayed-typeargument 和 声明 type 的交换x-delayed-message.spring-doc.cadn.net.cn

delayed属性(默认:false) 在使用 XML 配置交换 Bean 时也可用。 以下示例演示如何使用它:spring-doc.cadn.net.cn

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

要发送延迟消息,您可以将x-delayheader 通过MessageProperties,如以下示例所示:spring-doc.cadn.net.cn

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. 它是一个单独的属性,用于避免意外传播到从输入消息生成的输出消息。spring-doc.cadn.net.cn