遅延メッセージ交換
バージョン 1.6 は遅延メッセージ交換プラグイン (英語) のサポートを導入します
このプラグインは現在、実験的なものとしてマークされていますが、1 年以上 (執筆時点で) 利用可能になっています。プラグインの変更が必要になった場合は、実用的になり次第、そのような変更のサポートを追加する予定です。そのため、Spring AMQP でのこのサポートも実験的なものと見なす必要があります。この機能は、RabbitMQ 3.6.0 およびプラグインのバージョン 0.0.1 でテストされました。 |
RabbitAdmin
を使用して交換を遅延として宣言するには、交換 Bean の delayed
プロパティを true
に設定します。RabbitAdmin
は交換型 (Direct
、Fanout
など) を使用して x-delayed-type
引数を設定し、型 x-delayed-message
で交換を宣言します。
delayed
プロパティ (デフォルト: false
) は、XML を使用して交換 Bean を構成するときにも使用できます。次の例は、その使用方法を示しています。
<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()
メソッドを使用します。これは、入力メッセージから生成された出力メッセージへの意図しない伝搬を避けるための別個のプロパティです。