ActiveMQ消息丟失問題整理

項目中的Agent分網段訂閱ActiveMQ集群中VLAN.開頭的Topic,但是一直會出現有agent無法收到消息的情況。針對這個現象,最近幾天都在研究測試,今天有了點眉目,記錄一下進展。

消息的發(fā)送有三個要素,生產者,MQ,消費者。消費者保持與MQ的長連接,使用consumer.receive方法拉取消息。目前的現象是生產者日志里記錄了已經將消息發(fā)送至MQ了,但是消費者端沒收到。

排查問題思路

  1. 檢查消息是否真的發(fā)送至mq。
    方法:通過一個訂閱所有Topic(VLAN.>)的消費者,檢查MQ是否真的收到了消息。同時檢查agent是否收到消息。
    結果:消費者顯示MQ的確收到了,但是Agent沒有收到。

  2. 由于Agent使用了消息選擇器接收Topic消息,所以需要測試消息選擇器是否可用。
    方法:通過下發(fā)十幾個agent,檢查消息選擇器是否可用。
    結果:消息選擇器沒有問題。

  3. Agent連接是否正常
    方法:找網絡的同事一起查
    結果:通過tcpdump,檢查發(fā)現consumer.receive()并不會與服務器產生交互。真是見了鬼了。由于前期我關了MQ上的inactivity monitor,所以agent和mq之間出現了僵死的連接。Agent端判斷連接正常,mq上又認為連接斷開了。所以failover機制沒生效,數據無法通信。
    解決方案:開啟broker端的inactivity monitor功能。

此外,還發(fā)現了Agent在從blobmessage讀取數據流的時候,讀取一半就卡住了。這個問題還要再看看。。。

寫這個文章的時候,生產同事又打了個電話給我,現在看到生產的電話就嚇死了啊!!幸好只是問個問題。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容