Inbound Endpoint Acknowledge Mode
默认情况下,入站端点使用 AUTO
确认模式,这意味着容器在下游集成流完成后(或使用 QueueChannel
或 ExecutorChannel
将消息传递给另一线程)时自动确认消息。将模式设置为 NONE
会配置使用者,使其根本不使用确认(代理会在发送消息后立即自动确认消息)。将模式设置为 MANUAL
会让用户代码在处理期间的某个其他点确认消息。为了支持此模式,端点在 amqp_channel
和 amqp_deliveryTag
头中分别提供了 Channel
和 deliveryTag
。
你可以在 Channel
上执行任何有效的 Rabbit 命令,但通常情况下只使用 basicAck
和 basicNack
(或 basicReject
)。为了不干扰容器的操作,你不应保留对通道的引用,并且仅在当前消息的上下文中使用它。
由于 |
以下示例显示了你如何使用 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;
}