我有一個關於JMS和Spring集成的問題。一些Spring JMS問題
我有3個隊列,我們稱之爲QUEUE_SOURCE,QUEUE_TARGET和QUEUE_ERROR。 DefaultMessageListenerContainer用於讀取來自QUEUE_SOURCE的消息。
我爲這些隊列配置了JMS事務管理器。
當我從QUEUE_SOURCE讀取數據時發生了錯誤,但是在將消息發佈到QUEUE_TARGET時,我發現 可能會在引發異常之前重試幾次消息,觸發回滾。
我猜會發生什麼情況是這樣的:
1)開始交易 2)閱讀消息 3)嘗試張貼在目標隊列QUEUE_TARGET消息,但未能 4)不要因爲錯誤的承諾,所以消息不從QUEUE_SOURCE
OR
1)啓動事務 2)讀消息 3)從QUEUE_SOURCE 4取出消息中去除)嘗試張貼在目標闕消息ue QUEUE_TARGET,但失敗 5)將消息放回QUEUE_SOURCE
所有重新輸入失敗後,會觸發回滾。
但是,在回滾過程中會發生什麼讓我困惑。 我不知道消息何時結束,它肯定不會在源隊列中結束,也不會在錯誤隊列中結束。那麼在這個回滾過程中究竟發生了什麼?
感謝您的回答。我想知道的是,在回滾期間會發生什麼?如果消息在提交之前未被刪除,那麼回滾到底是做什麼的? – DKIT
這真的取決於經紀人如何實際執行;解決它是供應商的問題。從邏輯上講,消息在回滾之後會重新出現在隊列的頭部。無論是實際移除並重新打開還是標記爲「正在進行」取決於供應商。 –