確認是在用戶端與訊息服務之間傳送的訊息,可確保郵件傳送的可靠性。產生器與用戶的確認用法不盡相同。
以訊息產生來說,代理程式會確認它已收到訊息,並將其放置在它的目標上,以永久存放。產生器的 send() 方法會暫停運作,直到收到此確認為止。在傳送永久性訊息時,會對用戶端自動進行這些確認作業。
以訊息使用來說,必須在用戶端確認已收到目標傳送的訊息,並加以使用之後,代理程式才會刪除該目標上的該項訊息。JMS 指定不同的確認模式來代表不同程度的可靠性。
在 AUTO_ACKNOWLEDGE 模式中,階段作業會自動確認用戶端使用的每個訊息。階段作業執行緒會暫停運作,以等待代理程式確定已處理每個使用訊息用戶端的確認。
在 CLIENT_ACKNOWLEDGE 模式中,用戶端會在一或多個訊息已被使用之後,呼叫訊息物件的 acknowledge() 方法,以進行明確的確認。這會使階段作業確認自前次方法呼叫之後,由階段作業所使用的所有訊息。階段作業執行緒會暫停運作,以等待代理程式確定已處理用戶端的確認。
Message Queue 提供一種方法,讓用戶端只針對某個訊息接收與否進行確認,以延伸此模式。
在 DUPS_OK_ACKNOWLEDGE 模式中,階段作業會在使用 10 個訊息後確認。此模式中因為不需要使用代理程式確認,因此階段作業執行緒不會暫停來等侍代理程式的確認。雖然此模式可確保不會遺失任何訊息,但無法確保不會收到重複的訊息,這是其名稱:DUPS_OK。
對於效能高於可靠性的用戶端而言,Message Queue 服務提供 NO_ACKNOWLEDGE 方法來延伸 JMS API。在此模式中,代理程式不會追蹤用戶端確認,因此無法確保使用用戶端能夠順利處理訊息。選擇此模式可讓您在將非永久性訊息傳送給非長期訂閱者時,都保有較佳的效能。