默认情况下,入站端点使用确认模式,这意味着容器在下游集成流完成时自动确认消息(或使用 或 将消息传递给另一个线程)。
将模式设置为配置使用者,以便根本不使用确认(代理在发送消息后立即自动确认消息)。
将 mode 设置为 可让用户代码在处理过程中的其他时间点确认消息。
为了支持这一点,在此模式下,终端节点分别在 和 标头中提供 and。AUTO
QueueChannel
ExecutorChannel
NONE
MANUAL
Channel
deliveryTag
amqp_channel
amqp_deliveryTag
您可以在 but、通常仅使用 和 (或 ) 上执行任何有效的 Rabbit 命令。
为了不干扰容器的操作,您不应保留对通道的引用,而只能在当前消息的上下文中使用它。Channel
basicAck
basicNack
basicReject
由于 this 是对 “live” 对象的引用,因此它无法序列化,如果持久保存消息,它将丢失。Channel |
由于 this 是对 “live” 对象的引用,因此它无法序列化,如果持久保存消息,它将丢失。Channel |
以下示例显示了如何使用 acknowledgement: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;
}