|
如需使用最新稳定版本,请使用 Spring Integration 7.0.4! |
入站端点确认模式
默认情况下,入站端点使用 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;
}