默认情况下,入站端点使用确认模式,这意味着容器在下游集成流完成时自动确认消息(或者使用 或 将消息传递给另一个线程)。 设置模式以配置使用者,以便根本不使用确认(代理在发送消息后立即自动确认消息)。 将模式设置为允许用户代码在处理过程中的其他时间点确认消息。 为了支持这一点,在此模式下,端点分别在 和 标头中提供 和 。AUTOQueueChannelExecutorChannelNONEMANUALChanneldeliveryTagamqp_channelamqp_deliveryTagSpring中文文档

您可以对 Rabbit 执行任何有效的 Rabbit 命令,但通常只使用 和 (或 )。 为了不干扰容器的操作,不应保留对通道的引用,而不应仅在当前消息的上下文中使用它。ChannelbasicAckbasicNackbasicRejectSpring中文文档

由于 是对“实时”对象的引用,因此它不能被序列化,并且如果消息被保留,它将丢失。Channel
由于 是对“实时”对象的引用,因此它不能被序列化,并且如果消息被保留,它将丢失。Channel

以下示例演示如何使用确认:MANUALSpring中文文档

@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;
}