最新の安定バージョンについては、Spring Integration 7.0.1 を使用してください! |
受信エンドポイント確認モード
デフォルトでは、受信エンドポイントは AUTO 確認モードを使用します。これは、ダウンストリーム統合フローが完了すると(または、QueueChannel または ExecutorChannel を使用してメッセージが別のスレッドに渡されると)コンテナーがメッセージを自動的に確認することを意味します。モードを NONE に設定すると、確認応答がまったく使用されないようにコンシューマーが構成されます(ブローカーは、送信されるとすぐにメッセージを自動的に確認応答します)。モードを MANUAL に設定すると、ユーザーコードは処理中の他のポイントでメッセージを確認できます。これをサポートするために、このモードでは、エンドポイントはそれぞれ amqp_channel および amqp_deliveryTag ヘッダーで Channel および deliveryTag を提供します。
Channel で任意の有効な Rabbit コマンドを実行できますが、通常は basicAck と basicNack (または basicReject)のみが使用されます。コンテナーの操作を妨げないために、チャネルへの参照を保持せず、現在のメッセージのコンテキストでのみ使用する必要があります。
Channel は「ライブ」オブジェクトへの参照であるため、直列化できず、メッセージが永続化されると失われます。 |
次の例は、MANUAL 確認応答の使用方法を示しています。
@ServiceActivator(inputChannel = "foo", outputChannel = "bar")
public Object handle(@Payload String payload, @Header(AmqpHeaders.CHANNEL) Channel channel,
@Header(AmqpHeaders.DELIVERY_TAG) Long deliveryTag) throws Exception {
// Do some processing
if (allOK) {
channel.basicAck(deliveryTag, false);
// perhaps do some more processing
}
else {
channel.basicNack(deliveryTag, false, true);
}
return someResultForDownStreamProcessing;
}