gpt4 book ai didi

activemq - 消费者未从 ActiveMQ 接收消息

转载 作者:行者123 更新时间:2023-12-04 12:32:50 28 4
gpt4 key购买 nike

我们正面临 ActiveMQ 及其使用者的随机问题。我们观察到,即使连接到 ActiveMQ 队列,也很少有消费者没有收到消息。但是在消费者重启后它工作正常。

我们在 ActiveMQ 端有一个名为 testQueue 的队列。消费者正试图从这个队列中取出消息。为此,我们使用 Spring 的 DefaultMessageListenerContainer。消息正在从 ActiveMQ Broker 传递到消费者节点。从 tcpdump 也可以看出,消息正在到达消费者节点,但实际的消费者代码无法看到消息。换句话说,消息似乎卡在 ActiveMQ 消费者代码或 Spring 的 DefaultMessageListenerContainer 中。

参见下图。为了更清楚地了解这个问题。消息正在到达消费者节点,但没有到达“实际消费者类”,这意味着消息卡在了 AMQ 消费者代码或 Spring DMLC 中。

enter image description here

以下是从 ActiveMQ 管理员捕获的详细信息。

队列名称/Pending-Message-Count/Consumer-Count/Messages-Enqueued/Messages-Dequeued
测试队列/9/1/9/0

以下是更多详细信息。

连接 ID/SessionId/Selector/Enqueues/Dequeues/Dispatched/Dispatched-Queue/Prefetch
ID:bearsvir52-45176-1375519181268-3:5/1//9/0/9/9/250

从第二个表中可以明显看出,消息正在传递给消费者,但消费者并未确认该消息。因此,消息被困在代理端的 Dispatched-Queue 中。

请注意以下几点:

1)B/W Broker 节点和消费者节点没有时间差异。

2)观察消费者端的tcpdump。我们可以看到 MessageDispatch(Openwire) 数据包正在传输到消费者节点,但找不到相同的 MessageAck(Openwire)。

3)有时它在一个节点上工作,有时它在同一个节点上产生问题。

最佳答案

造成这种情况的一个原因可能是错误地使用了 CachingConnectionFactory (带有缓存的消费者)带有动态调整消费者(最大消费者 > 消费者)的监听器容器。您最终可能会得到一个缓存的消费者,只是坐在池中而没有被积极使用。您永远不需要使用监听器容器来缓存消费者。

对于此类问题,我通常建议使用 TRACE 日志记录运行,您可以看到所有消费者事件。

关于activemq - 消费者未从 ActiveMQ 接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18181619/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com