我們有生產者以比消費者消耗的速度更快的速度生成消息。我們將Spring JMS集成用作消費者端技術堆棧。目前我們正在使用AUTO_ACKNOWLEDGE
模式。消息監聽器中的消息重新傳遞和錯誤處理
在偵聽器的onMessage()
方法中,收到後我們計劃將客戶端作業提交給作業隊列,並從onMessage()
方法返回。這意味着如果a)處理失敗或b)我們的服務器在處理過程中出現故障,我們無法恢復。
我們研究了使用CLIENT_ACKNOWLEDGE
的選項,但這意味着確認具有較高時間戳的消息自動確認所有消息的時間戳較少。這對我們來說顯然是不可取的,因爲成功處理具有較新時間戳的消息並不意味着所有具有較舊時間戳的消息都被完全處理。實際上,我們正在查看每條消息確認。但是,我在某處讀到這意味着存在一些設計缺陷。
另一種選擇是使用Spring提供的SessionAwareMessageListener
接口。使用此接口的合同說,如果從onMessage
拋出JMSException
,則該消息將被重新遞送。但是,我並不完全確定如何將其用於我們的目的。
雖然我更深入地瞭解了這一點,但任何來自你們的幫助都將不勝感激。