我試圖找到一個問題的解決方案,以保證消息只被一個消費者完全處理。ActiveMQ故障轉移重新連接消息回滾
隊列上的許多消息和一些消費者讀取消息並處理它們寫入數據庫。我的消息是經過處理的,所以如果消費者死亡,那麼消息就會返回到另一個消費者處理的隊列中。
我們必須對activemq進行主動/被動配置,這會導致問題。如果我停止激活的activemq,那麼當我使用故障轉移傳輸時,使用者將重新連接到另一個activemq。這很好,但在重新連接期間,消息被放回隊列中,並且消費者沒有意識到這種重新連接並繼續處理。這導致2個消費者處理相同消息的情況。
我本來希望使用分佈式事務管理器,這可能發生在將來,但現在我需要一個不同的解決方案。
如果我不使用故障轉移傳輸,那麼我可以掛接到JMSException偵聽器並中止使用者。不幸的是,這在使用故障轉移傳輸時不起作用。
我想要使用故障轉移傳輸進行初始連接(發現哪個activemq正在運行),然後強制故障轉移不要重新連接...或者使用允許服務器列表嘗試但不連接的不同傳輸不要重新連接...或者去找聽聽重新連接。
請注意,有時只有一臺服務器使用故障切換(重新連接)。
我可以做我在初始連接邏輯(狩獵活動服務器),但要檢查是否有另一種選擇
剛纔我發現我可以使用發現來啓動一個有效的連接 – Paul 2014-09-04 09:45:33