跟踪流氓 AMQ 消息的来源

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

我有一个队列,我们称之为shouldBeDead,它不应该再接收任何消息。它在某个时间点已被弃用,并且不应再向该队列发送消息。但是定期它被数百消息从轰炸东西/某处。它没有消费者(这是正确的;我的 Java 应用程序套件不再在它们的代码中的任何地方使用它,因此没有任何东西在监听该队列以消耗它的消息)。

更复杂的是,这是一个旧的 AMQ 版本,存在这个已知的 UI 错误,其中TLDR;是:我需要将 AMQ 实例升级到 > 5.12.x。但是,由于这个问题上下文之外的原因,我目前无法升级 AMQ。因此,虽然我希望浏览排队的消息shouldBeDead并深入了解它们以获取有关它们的信息,但我什至无法在 AMQ Web UI 或应用程序日志中查看它们。

我只是想弄清楚这些消息是从哪里来的!

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

我希望我可以使用一些 AMQ 命令行功能来检查队列元数据,也许可以查看 KahaDB 或任何其他类型的魔法来查看这些消息和/或从中获取跟踪/客户端信息.

最坏的情况我知道我可以部署一些代码更改以重新添加shouldBeDead侦听器/消费者并记录消息,但是我真的试图在不进行任何代码更改的情况下执行此操作。任何想法/想法?提前致谢!


www说
浏览 126回答 1
1回答

萧十郎

我会通过JMX console.这是通过JMX可用的诊断信息的列表,在这里是一种如何通过命令行访问这些数据。通过了解您的问题的确切细节,例如:这些爆发的可预测性如何大约有多少消息发送了你有多少连接您需要捕获相关信息以捕获您的生产者。当然,在不知道细节的情况下,一个可能可行的想法是:定期运行 bash 脚本以检查队列的大小(如Destination/EnqueueCount)+ 定期保存所有活动连接。当您检测到已弃用队列中消息的峰值时,请回顾当时刚刚出现的连接 ( Connection/RemoteAddress)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java