跟踪流氓 AMQ 消息的来源

Tracking where rogue AMQ messages coming from

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

我有一个队列,我们​​称它为 shouldBeDead,它不应该再接收任何消息。它在某个时间点被弃用,不再应该向该队列发送消息。然而,它会定期受到来自 某事/某处 的数百条消息的轰炸。它上面没有消费者(这是正确的;我的 Java 应用程序套件不再在代码中的任何地方使用它,因此没有任何东西在该队列上监听以使用它的消息)。

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

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

进行网络分析可能会有所收获,但这超出了我的技能范围,这些消息看似随机地涌入队列,没有任何可辨别的模式。

我希望我可以使用一些 AMQ 命令行功能来检查队列元数据,也许可以查看 KahaDB 或我可以使用的任何其他类型的魔法来查看这些消息 and/or get tracking/client-side 信息。

最坏情况 我知道我可以部署一些代码更改以添加 shouldBeDead listener/consumer 并重新记录消息,但是我真正尝试在不更改任何代码的情况下执行此操作。有 ideas/thoughts 吗?提前致谢!

我会通过 JMX console 来解决问题。

Here is a list of diagnostic informations available via JMX, and here 是一种通过命令行访问此数据的方法。通过了解问题的确切细节,例如:

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

您需要获取相关信息才能抓到您的制作人。

在不知道细节的情况下,一个可能可行的想法:
运行 一个 bash 脚本定期检查队列的大小(如 Destination/EnqueueCount)+ 定期保存所有活动连接。当您检测到已弃用队列中消息的峰值时,回头看看当时刚刚出现的连接 (Connection/RemoteAddress)。