延遲訊息交換
1.6 版本引入了對 延遲訊息交換外掛 的支援
該外掛目前被標記為實驗性的,但已經可用一年以上(在撰寫本文時)。如果對外掛的更改使其成為必要,我們計劃儘快新增對此類更改的支援。因此,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()
方法。 它是一個單獨的屬性,以避免意外傳播到從輸入訊息生成的輸出訊息。