受信エンドポイント確認モード
デフォルトでは、受信エンドポイントは 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;
}