一種確保 JMS 訊息可靠傳送的機制,用戶端會確認 Message Queue 代理程式所傳送的訊息已被使用。
如果在用戶端尚未確認訊息時關閉階段作業,或在處理確認前代理程式發生故障,則代理程式會重新傳送訊息,並設定 JMSRedelivered 旗標。
對於未處理的階段作業而言,用戶端可以選擇三種確認模式中的一種,而每一種模式都具有各自的效能特徵:
AUTO_ACKNOWLEDGE。一旦用戶處理訊息後,系統會自動確認訊息。此模式可確保提供者發生故障後最多會重新傳送一次訊息。
CLIENT_ACKNOWLEDGE。此應用程式會控制確認訊息的端點。確認先前的確認後,所有訊息會在該階段作業中進行處理。在處理一組確認時,如果代理程式發生故障,則會重新傳送群組中一個或多個訊息。
DUPS_OK_ACKNOWLEDGE。此模式引導系統在惰性狀態下確認訊息。提供者發生故障後,可以重新傳送多個訊息。
(使用 CLIENT_ACKNOWLEDGE 模式與使用作業事件相似,但如果在處理期間提供者發生故障,則前者不確保會一併處理所有的確認。)
確認模式影響效能的原因如下:
在 AUTO_ACKNOWLEDGE 和 CLIENT_ACKNOWLEDGE 模式中,代理程式與用戶端之間需要有額外的控制訊息。額外控制訊息會增加額外的處理經常性耗用時間,並且可能會干擾 JMS 有效負載訊息,因而造成處理延遲。
在 AUTO_ACKNOWLEDGE 和 CLIENT_ACKNOWLEDGE 模式中,用戶端必須等待代理程式確定已處理用戶端的確認,才能夠使用其他訊息。(代理程式的此項確認作業可確保代理程式不會意外重新傳送這些訊息。)
必須以用戶所接收全部永久性訊息的確認資訊來更新 Message Queue 永久性存放區,因此會降低效能。