跟踪流氓AMQ消息来自哪里

时间:2018-10-17 18:43:30

标签: java amq

此处是AMQ 5.7。我继承了一组非常古老的Java应用程序,这些应用程序使用ActiveMQ(AMQ)代理相互之间以及与该生态系统外部的客户端进行通信。因此,AMQ代理上有数百个(!!!)队列,实际上有数百个JMS客户端生活在数十个不同的服务器(每个服务器)上,它们将消息发布到这些队列并从中使用消息。它是老鼠的巢。

我有一个队列,我们​​称它为shouldBeDead,该队列不应再收到任何消息。它在某个时间点已过时,不再有任何消息可发送到该队列。但是,它会定期受到来自 something / somewhere 的数百条消息的轰炸。它没有任何使用者(是正确的;我的Java应用程序套件在其代码中的任何地方都不再使用它,因此没有人在该队列上侦听以消耗其消息)。

更复杂的是,这是一个受this known UI bug困扰的旧AMQ版本,其中 TLDR; 是:我需要将AMQ实例升级到>5.12.x。但是,出于此问题之外的原因,我目前无法升级AMQ。因此,尽管我希望浏览shouldBeDead上的排队消息并深入研究它们以获得有关它们的信息,但我什至无法在AMQ Web UI或应用程序日志中查看它们。

我只是想弄清楚这些消息的来源!

进行网络分析可能很有成果,但超出了我的技能范围,这些消息在看似随机的时间充满了队列,没有任何可辨别的模式。

我希望我可以做一些AMQ命令行检查队列元数据,也许可以窥视KahaDB或我可以做的任何其他类型的魔术来查看这些消息和/或获取跟踪/客户端信息从他们当中。

最坏的情况我知道我可以部署一些代码更改以重新添加shouldBeDead侦听器/消费者并记录消息,但是我实际上是在尝试这样做而不做任何代码更改。有什么想法/想法吗?预先感谢!

1 个答案:

答案 0 :(得分:1)

我会通过JMX console解决问题。

Here是可通过JMX获得的诊断信息的列表,而here是如何通过命令行访问此数据的方式。通过了解问题的确切详细信息,例如:

  • 这些爆发的可预测性
  • 大约有多少条消息
  • 发送了多少个连接

您需要捕获相关信息以吸引您的制作人。

在不了解具体细节的情况下,一个可行的想法可能是:
定期运行bash脚本,以检查队列的大小(例如Destination/EnqueueCount),并定期保存所有活动连接。当您在不赞成使用的队列中检测到邮件高峰时,请回看当时刚刚出现的连接(Connection/RemoteAddress)。