版本 1.6 引入了对延迟消息交换插件的支持Spring中文文档

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

要使用 a 将交换声明为延迟,可以将交换 Bean 上的属性设置为 。 使用 exchange 类型(、 等)来设置参数和 声明 Exchange,类型为 。RabbitAdmindelayedtrueRabbitAdminDirectFanoutx-delayed-typex-delayed-messageSpring中文文档

使用 XML 配置交换 Bean 时,该属性(默认值:)也可用。 以下示例演示如何使用它:delayedfalseSpring中文文档

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

要发送延迟消息,您可以设置标头 ,如以下示例所示:x-delayMessagePropertiesSpring中文文档

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()MessagePropertiesSpring中文文档