2015-05-29 67 views
2

JMS API將我驅動到精神崩潰的地步。輪詢jms隊列的消息並明確確認每條消息已被正確處理的正確方法是什麼?JMS - 如何正確實現消息接收器與明確的確認?

我應該在上述場景中創建一個「事務處理會話」以及哪種確認模式是正確的?

我的設計約束:

  1. 重複傳送是沒有問題
  2. 性能不是主要關心的問題
  3. 在地板上刪除郵件是不能接受的
  4. 我寧願不添加一個依賴Spring-JMS

回答

1

JMS中有3種類型的消息確認類型:

DUPS_OK_ACKNOWLEDGE - 如果JMS提供程序發生故障,會自動對消息進行自動延遲確認,這可能會導致重複消息。

AUTO_ACKNOWLEDGE - 客戶端應用程序明確承認消息 - 當消息被傳遞到應用

CLIENT_ACKNOWLEDGE會話自動確認。

根據您的要求,我認爲您可以選擇CLIENT_ACKNOWLEDGE,因爲它允許您的應用程序明確確認消息。但是您必須注意,在某些JMS提供程序中,確認消費的消息會自動確認收到其會話已傳遞的所有消息。但是,一些JMS提供者確實實現了每個消息確認。

您擁有的其他選項是使用確認模式無效的事務處理會話。在事務處理會話中,僅當應用程序調用commit時纔會從隊列中刪除消息。如果會話呼叫rollback或結束呼叫commit,則自上一次commit呼叫以來傳送到應用程序的所有消息都將重新出現在隊列中。