延遲訊息交換

版本 1.6 引入了對 Delayed Message Exchange Plugin 外掛程式的支援

此外掛程式目前標記為實驗性,但已推出一年多(撰寫本文時)。如果此外掛程式的變更使其成為必要,我們計劃在實際可行的情况下儘快新增對此類變更的支援。因此,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() 方法。這是一個獨立的屬性,以避免意外傳播到從輸入訊息產生的輸出訊息。