对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
入站终端确认模式
默认情况下,入站端点使用AUTO
确认模式,这意味着容器在下游集成流完成时自动确认消息(或者通过使用QueueChannel
或ExecutorChannel
).
将模式设置为NONE
配置使用者,以便根本不使用确认(代理在发送消息后立即自动确认消息)。
将模式设置为MANUAL
允许用户代码在处理过程中的其他某个时间点确认消息。
为了支持这一点,在此模式下,端点提供Channel
和deliveryTag
在amqp_channel
和amqp_deliveryTag
标头。
您可以在Channel
但是,一般来说,只有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;
}