入站端點確認模式

預設情況下,入站端點使用 AUTO 確認模式,這意味著當向下遊整合流完成時(或透過使用 QueueChannelExecutorChannel 將訊息傳遞給另一個執行緒時),容器會自動確認訊息。將模式設定為 NONE 會將消費者配置為根本不使用確認(代理在傳送訊息後立即自動確認)。將模式設定為 MANUAL 允許使用者程式碼在處理過程中的其他某個時間點確認訊息。為了支援此模式,端點在 amqp_channelamqp_deliveryTag 標頭中分別提供 ChanneldeliveryTag

您可以在 Channel 上執行任何有效的 Rabbit 命令,但通常只使用 basicAckbasicNack(或 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;
}
© . This site is unofficial and not affiliated with VMware.