延遲訊息交換

1.6 版本引入了對 延遲訊息交換外掛 的支援

該外掛目前被標記為實驗性的,但已經可用一年以上(在撰寫本文時)。如果對外掛的更改使其成為必要,我們計劃儘快新增對此類更改的支援。因此,Spring AMQP 中的這種支援也應被視為實驗性的。此功能已使用 RabbitMQ 3.6.0 和外掛的 0.0.1 版本進行了測試。

要使用 RabbitAdmin 將交換宣告為延遲交換,您可以將交換 Bean 上的 delayed 屬性設定為 trueRabbitAdmin 使用交換型別(DirectFanout 等)來設定 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() 方法。 它是一個單獨的屬性,以避免意外傳播到從輸入訊息生成的輸出訊息。