我有一個與持久性JMS(ActiveMQ)隊列集成的Java/Akka應用程序。用Akka耐用郵箱處理事務性消息
PersistentQueue
包含包含批處理作業的JMS/ActiveMQ隊列。所以,如果服務器在任務執行過程中,則作業將在重新啓動時保持下降的消息在事務中收到的。如果作業成功完成或由用戶則此事務被提交到永久刪除消息取消,如果再作業失敗的事務回滾(將在隊列前面的消息),如果作業已執行較少比MAX_RETRY倍。
BatchManager
是與REST控制器的接口。由於作業執行期間調用的存儲過程施加的限制,它一次只能執行一個批處理作業。 BatchManager
從控制器接收作業,並將它們發送到PersistentQueue
以放入JMS隊列,然後在作業排隊(除非另一個作業正在執行)或作業完成時輪詢PersistentQueue
以獲取新作業。
我想刪除JMS隊列以及處理其JMSExceptions
的所有複雜問題,並將其替換爲BatchManager
的耐用郵箱。問題是,我不知道我怎麼能複製JMS事務具有持久郵箱 - 我的理解是,如果服務器作業執行則該消息被永遠失去了(而不是被放回到隊列中時下降JMS隊列)。
是否有辦法通過Akka持久性郵箱實現事務性消息處理,以便在正在執行的服務器出現故障時消息不會丟失?