パブリッシャーの確認と return の代替メカニズム

パブリッシャーの確認と返送を行うように接続ファクトリが設定されている場合、上記のセクションでは、confirms と returns を非同期に受信するためのメッセージチャネルの設定について説明しました。バージョン 5.4 以降では、より使いやすい追加のメカニズムが提供されています。

この場合、confirm-correlation-expression チャネル、confirm チャネル、return チャネルは設定しないでください。代わりに、AmqpHeaders.PUBLISH_CONFIRM_CORRELATION ヘッダーに CorrelationData インスタンスを追加してください。その後、メッセージを送信した CorrelationData インスタンスの Future の状態を確認することで、結果を待つことができます。returnedMessage フィールドは、Future が完了する前に必ず設定されます(メッセージが返された場合)。

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 をサブクラス化できます。