我有關於重新傳遞郵件的問題。ActiveMQ和redelivery
的設置如下:
兩個AMQ實例AMQ1和AMQ2(版本5.10.0)在主/從配置中運行(其中AMQ1是主站)和兩個消費者A和B由相同的隊列取出問:客戶端被配置爲使用ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE,並且它們坐在循環提取(拉模式)消息中,沒有確認任何消息。
測試用例:
- 發送持久消息到隊列Q.
- 該消息由A.
- 停止AMQ1消耗,這帶來了AMQ2。現在
,兩種情況之一發生:
一)消費者再次接收到該消息導致該消息被放在死信隊列。 b)消費者B收到消息,現在A和B都有相同的消息。
在a)我面對的問題是,如果A崩潰的消息丟失。在b)問題是,現在兩個消費者採取相同的信息。
是否有可能配置AMQ以跟蹤重新連接使用者,因此如果它發現它已經存在於某些消費者中,它不會重新發送消息?至少應該有a)的方法來避免將消息放入DLQ中?
謝謝!
您是否有理由等待確認您的消息?如果你不告訴經紀人你已經處理了這封郵件,它將在郵件恢復時嘗試重新發送郵件。我很驚訝你看到了行爲a),但b)對你所描述的內容非常期待。 – Tim 2014-10-21 00:35:44
@Tim我正在處理需要幾分鐘才能完成的消息。我將最終確認這個消息,但在此過程中重新啓動AMQ將導致我的問題中描述的測試用例。 – garfen235 2014-10-21 08:07:20
好的,根據你的描述,聽起來好像你的消費者會在不承認第一條消息的情況下拉第二條(和第三條,第四條等)消息。感謝您的澄清。 – Tim 2014-10-21 15:49:45