パブリッシャーの確認と 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 をサブクラス化できます。