在我的應用程序中,我有一個在JBoss 7 AS上設置的隊列(HornetQ)。 一旦收到消息(保存數據庫中的值等),然後消費者提交JMS會話,我就使用Spring批處理來完成一些工作。 有時當處理消息時出現異常時,用戶的執行突然中止。 消息仍處於「交付」狀態。我的生產隊列中有大約30條消息處於此狀態。
我已嘗試重新啓動使用者,但這些消息的狀態不會更改。從隊列中刪除這些 消息的唯一方法是重新啓動隊列。但在此之前,我想要一種方法來讀取這些消息,以便它們可以被糾正並再次發送到隊列進行處理。 我曾嘗試使用QueueBrowser閱讀它們,但它不起作用。我在谷歌搜索了很多,但不能 找到任何方式來閱讀這些消息。更改「正在交付」的郵件的狀態
我使用的事務會話,其中一旦處理了該消息,我打電話:
session.commit();
此發送確認。 我採取春天的
org.springframework.jms.listener.SessionAwareMessageListener
到收到消息,然後對它們進行處理。 在處理消息時,我使用spring批處理在數據庫中插入一些數據。 對於特定情況,它會嘗試插入數據太大以致無法插入列中。 它引發異常並中止事務。
現在,我已經修復了我的生產者和消費者沒有這樣的數據,所以這種情況不應該再發生。
但我的問題是在我的生產隊列中的30「交付」狀態消息呢?我想讀取它們,以便它們可以更正並再次發送到隊列進行處理。有什麼方法可以閱讀這些消息嗎?一旦我知道他們的內容,我可以重新啓動隊列並重新提交(糾正後)。
感謝你在期待,
Suvarna
嗨Clebert,非常感謝你的快速和詳細的答覆。它有幫助。 我編輯了我的問題有更多的細節。你能幫忙嗎? – SNJoshi
我已經回答了..你必須在你的東西失敗時調用回滾..或關閉它。如果你打開它,它將保持這種狀態。 –
再次感謝您的回覆。但我不明白,我無法閱讀30條「交付」狀態消息。消費者 讀取並處理添加到隊列中的新消息,但不讀取舊消息。我試圖創建另一個消費者 ,但這些舊消息似乎被卡住了。 :( – SNJoshi