項目中的Agent分網段訂閱ActiveMQ集群中VLAN.開頭的Topic,但是一直會出現有agent無法收到消息的情況。針對這個現象,最近幾天都在研究測試,今天有了點眉目,記錄一下進展。
消息的發(fā)送有三個要素,生產者,MQ,消費者。消費者保持與MQ的長連接,使用consumer.receive方法拉取消息。目前的現象是生產者日志里記錄了已經將消息發(fā)送至MQ了,但是消費者端沒收到。
排查問題思路
檢查消息是否真的發(fā)送至mq。
方法:通過一個訂閱所有Topic(VLAN.>)的消費者,檢查MQ是否真的收到了消息。同時檢查agent是否收到消息。
結果:消費者顯示MQ的確收到了,但是Agent沒有收到。由于Agent使用了消息選擇器接收Topic消息,所以需要測試消息選擇器是否可用。
方法:通過下發(fā)十幾個agent,檢查消息選擇器是否可用。
結果:消息選擇器沒有問題。Agent連接是否正常
方法:找網絡的同事一起查
結果:通過tcpdump,檢查發(fā)現consumer.receive()并不會與服務器產生交互。真是見了鬼了。由于前期我關了MQ上的inactivity monitor,所以agent和mq之間出現了僵死的連接。Agent端判斷連接正常,mq上又認為連接斷開了。所以failover機制沒生效,數據無法通信。
解決方案:開啟broker端的inactivity monitor功能。
此外,還發(fā)現了Agent在從blobmessage讀取數據流的時候,讀取一半就卡住了。這個問題還要再看看。。。
寫這個文章的時候,生產同事又打了個電話給我,現在看到生產的電話就嚇死了啊!!幸好只是問個問題。。。