遅延メッセージ交換

バージョン 1.6 は遅延メッセージ交換プラグイン (英語) のサポートを導入します

このプラグインは現在、実験的なものとしてマークされていますが、1 年以上 (執筆時点で) 利用可能になっています。プラグインの変更が必要になった場合は、実用的になり次第、そのような変更のサポートを追加する予定です。そのため、Spring AMQP でのこのサポートも実験的なものと見なす必要があります。この機能は、RabbitMQ 3.6.0 およびプラグインのバージョン 0.0.1 でテストされました。

RabbitAdmin を使用して交換を遅延として宣言するには、交換 Bean の delayed プロパティを true に設定します。RabbitAdmin は交換型 (DirectFanout など) を使用して 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() メソッドを使用します。これは、入力メッセージから生成された出力メッセージへの意図しない伝搬を避けるための別個のプロパティです。