【问题标题】:ActiveMQ 5.16.1 - Messages get stuckActiveMQ 5.16.1 - 消息卡住
【发布时间】:2021-08-06 11:23:29
【问题描述】:

我们目前的 ActiveMQ 5.16.1 出现问题,它突然开始堆积消息而没有任何明显的原因。下图显示了 ActiveMQ QueueSize:

ActiveMQ 用作 JMS 消息代理,无需任何其他组件,例如高可用性或负载平衡。几个生产者(总共有 20 个左右,最坏的情况是大约 20 个)产生小型/简单的 JSON 消息,这些消息发送到代理并由基于 JAVA 的微服务使用。微服务处理消息并将数据保存到 Oracle 数据库。一个请求的平均处理时间约为 30 毫秒。在这 20 个生产者中,只有一些同时活跃,可能在 2 到 10 个生产者之间变化。每个生产者每 3 秒发送一条消息,每个生产者每分钟发送 20 条消息。例如:有 10 个生产者,代理将获得 200 条消息/分钟或 30 条消息/秒。保持订单至关重要,因此我正在使用 JMSXGroupIds,到目前为止效果很好。消息通过 MQTT 发送并路由(通过 Camel)到 JMS 队列:

    <route id="handleData"> 
        <from uri="activemq://topic:some.topic.here?clientId=uniqueClientId" /> 
          <setHeader headerName="tName">
             <constant>ABC123</constant>
          </setHeader>
          <setHeader headerName="JMSXGroupId">
             <jsonpath>$.producerId</jsonpath>
          </setHeader>
        <to uri="activemq://queue:myQueue" />
    </route>

但是由于某种原因,消息在一段时间后卡住了,我找不到任何重要的提示为什么会发生这种情况。日志文件和操作系统事件日志中没有任何内容。我必须重新启动 ActiveMQ 服务才能“重新激活”它。之后将处理所有卡住的消息,并且一切正常,直到下一次“事故”。这次消息卡住了大约 10 天。

我已经检查过是否可能存在网络或数据库相关问题。甚至将 ActiveMQ 移动到一个全新的服务器上,以确保没有其他任何东西影响 ActiveMQ 进程。但我也找不到任何提示。我观察了 JVM、堆空间增长、内存使用等 - 一切都没有什么特别之处。

有没有人知道我可以另外检查什么来找出问题所在?

【问题讨论】:

  • 在消息开始累积期间,队列中的消费者计数做了什么?
  • @JustinBertram - 保持不变(目前允许 10 个中有 8 个)。此外,我检查了客户端是否被视为慢消费者 - 它不是。即使我没有看到任何可能被认为是慢消费者的消费者,我还是激活了“abortSlowConsumerStrategy”。不知道这有没有帮助,这更像是一种拼命想要抓住它的尝试。

标签: microservices activemq messagebroker


【解决方案1】:

为这些主题添加advisoryForSlowConsumerdestinationPolicy 设置,并观察主题://ActiveMQ.Advisory.. 以了解任何表明消费者出现缓慢的排队计数。

您的 Camel 路线几乎与 VirtualTopic 的作用相同。在这些类型的场景中,您会看到与服务器端路由更好的一致性,因为没有远程进程(即 Camel 路由)来管理连接、会话等。

奖励:MQTT 传输支持使用虚拟主题来后端订阅,因此您的任何 MQTT 主题消费者都会自动从队列中拉出。

参考:https://activemq.apache.org/virtual-destinations

【讨论】:

  • 感谢您的建议!我会尝试一下,看看它是否会变得更好。目前问题仍然存在。虽然没有遇到消费者作为慢消费者但堆叠消息。一旦我重新启动实例,消息就会被消耗并且一切正常,直到下一次“崩溃”。
猜你喜欢
  • 2016-10-24
  • 1970-01-01
  • 2018-06-03
  • 2018-11-30
  • 2014-05-22
  • 1970-01-01
  • 2018-02-03
  • 2020-06-22
  • 2014-11-03
相关资源
最近更新 更多