在 ActiveMQ 集群中,如何找到选择特定消息或消息集的消费者?

In ActiveMQ clustering, how to find the consumer who picked a particular message or set of messages?

我们有一组队列,并且已经编写了骆驼路由来使用队列中的消息——队列存在于 ActiveMQ 服务器中,骆驼路由存在于 Apache Karaf 中。我们建立了一个包含多个 karaf 节点的集群;问题是这些消息被不同节点中的骆驼路线读取;有没有办法知道选择特定消息或消息集的消费者?我四处搜索,但没有找到任何头绪,所以我在这里寻求你的帮助。

ActiveMQ 中不跟踪已使用的消息,建议消息除外。解决方案是让每个 Camel 消费者宣布它以某种方式处理了一条消息。有很多方法可以做到这一点,例如写入日志文件、将日志发送到数据库、电子邮件或其他取决于频率和需要的方式。当然,你可以编写一些插件或类似于 ActiveMQ 的东西,让它记录你需要的信息,但这看起来很尴尬。

出于调试目的,您可以使用 Hawtio 来监控您的 Camel 节点并跟踪路由使用的消息。您还可以在那里动态地将日志记录添加到您的路线。

您可以尝试组合使用:

  1. ActiveMQ TraceBrokerPathPlugin: Configure 这个插件在你集群的每个节点上。它会在消息通过节点时将 'brokerName' 附加到消息中的 JMS header。
  2. 在 Camel 上下文中启用 Message History:配置所有 camel 上下文以启用消息历史记录。它将包括一个交换 属性,其中包含一个 org.apache.camel.MessageHistory 的列表,其中包含路由元数据。
  3. 启用trace or implement EventNotifier将您需要的信息写入日志文件。
  4. (可选) 实施相关标识符 以更好地识别 conversation/transaction.[=26 中的消息流=]