パブリッシャーの確認と return の代替メカニズム
接続ファクトリがパブリッシャーの確認と戻りに対して構成されている場合、上記のセクションでは、確認を受け取り非同期で返すメッセージチャネルの構成について説明します。バージョン 5.4 以降、一般的に使いやすいメカニズムが追加されています。
この場合、confirm-correlation-expression
または確認チャネルと戻りチャネルを構成しないでください。代わりに、AmqpHeaders.PUBLISH_CONFIRM_CORRELATION
ヘッダーに CorrelationData
インスタンスを追加します。その後、メッセージを送信した CorrelationData
インスタンスの将来の状態を確認することにより、後で結果を待つことができます。returnedMessage
フィールドは、未来が完了する前に(メッセージが返された場合)常に入力されます。
CorrelationData corr = new CorrelationData("someId"); // <--- Unique "id" is required for returns
someFlow.getInputChannel().send(MessageBuilder.withPayload("test")
.setHeader("rk", "someKeyThatWontRoute")
.setHeader(AmqpHeaders.PUBLISH_CONFIRM_CORRELATION, corr)
.build());
...
try {
Confirm Confirm = corr.getFuture().get(10, TimeUnit.SECONDS);
Message returned = corr.getReturnedMessage();
if (returned !- null) {
// message could not be routed
}
}
catch { ... }
パフォーマンスを向上させるために、一度に 1 つずつではなく、複数のメッセージを送信して後で確認を待つことをお勧めします。返されるメッセージは、変換後の生のメッセージです。必要な追加データを使用して CorrelationData
をサブクラス化できます。