2012-03-01 77 views
1

我們有生產者以比消費者消耗的速度更快的速度生成消息。我們將Spring JMS集成用作消費者端技術堆棧。目前我們正在使用AUTO_ACKNOWLEDGE模式。消息監聽器中的消息重新傳遞和錯誤處理

在偵聽器的onMessage()方法中,收到後我們計劃將客戶端作業提交給作業隊列,並從onMessage()方法返回。這意味着如果a)處理失敗或b)我們的服務器在處理過程中出現故障,我們無法恢復。

我們研究了使用CLIENT_ACKNOWLEDGE的選項,但這意味着確認具有較高時間戳的消息自動確認所有消息的時間戳較少。這對我們來說顯然是不可取的,因爲成功處理具有較新時間戳的消息並不意味着所有具有較舊時間戳的消息都被完全處理。實際上,我們正在查看每條消息確認。但是,我在某處讀到這意味着存在一些設計缺陷。

另一種選擇是使用Spring提供的SessionAwareMessageListener接口。使用此接口的合同說,如果從onMessage拋出JMSException,則該消息將被重新遞送。但是,我並不完全確定如何將其用於我們的目的。

雖然我更深入地瞭解了這一點,但任何來自你們的幫助都將不勝感激。

回答

0

會話感知消息具有以下的onMessage原型:

onMessage(Message message, Session session) 

調用Session.recover時(),用於該消息重新傳遞。 session.recover()會將所有未確認的消息發送回jms目的地。