为了账号安全,请及时绑定邮箱和手机立即绑定

跟踪流氓 AMQ 消息的来源

跟踪流氓 AMQ 消息的来源

www说 2021-11-24 15:02:46
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侦听器/消费者并记录消息,但是我真的试图在不进行任何代码更改的情况下执行此操作。任何想法/想法?提前致谢!
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

我会通过JMX console.

是通过JMX可用的诊断信息的列表,在这里是一种如何通过命令行访问这些数据。通过了解您的问题的确切细节,例如:

  • 这些爆发的可预测性如何

  • 大约有多少消息

  • 发送了你有多少连接

您需要捕获相关信息以捕获您的生产者。

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


查看完整回答
反对 回复 2021-11-24
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信