【问题标题】:ActiveMQ Pending messagesActiveMQ 待处理消息
【发布时间】:2019-06-02 03:20:07
【问题描述】:

我有一个类似于这个的 ActiveMQ 问题: http://activemq.2283324.n4.nabble.com/Messages-stuck-in-pending-td4617979.html 并且已经尝试过这里发布的解决方案。

有些消息似乎卡在队列中,并且可以在那里放置几天而不会被消耗。我有足够多的消费者大部分时间都是免费的,所以这不是消费者“饱和”的问题。

在 ActiveMQ 重新启​​动时,一些待处理的消息会立即被消耗。就在刚才,我有 25 个免费消费者可用于队列(它们在管理面板中可见),其中有 7 条“卡住”消息。其中四个立即被消耗,但其他 3 个仍被卡住。另一个奇怪的事情是 - 新消息不断进入队列并立即被消耗,而 3 条旧消息仍然卡住。

在消费者方面,我在 spring 中的配置如下所示:

<jms:listener-container concurrency="${activemq.concurrent.consumers}" prefetch="1">
    <jms:listener destination="queue.request" response-destination="queue.response" ref="requestConsumer" method="onRequest"/>
</jms:listener-container>

<bean id="prefetchPolicy" class="org.apache.activemq.ActiveMQPrefetchPolicy">
        <property name="queuePrefetch" value="1" />
</bean>

<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${activemq.broker.url}?initialReconnectDelay=100&amp;maxReconnectDelay=10000&amp;startupMaxReconnectAttempts=3"/>
    <property name="prefetchPolicy" ref="prefetchPolicy"/>
</bean>

【问题讨论】:

    标签: java spring jms activemq


    【解决方案1】:

    “卡住”的消息可能被视为“正在传递”,重新启动代理将关闭连接,并且由于尚未确认消息,代理将认为它们未传递并将再次传递。

    可能有几个问题导致这种情况,最常见的问题是事务/确认配置问题、消费者端错误/确认管理错误(消息被消费但从未确认)或消费者被无限卡住操作(例如对没有响应且没有超时处理的第三方资源的阻塞调用)。

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 2012-11-08
      • 2019-07-26
      • 2014-09-24
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 2011-12-08
      相关资源
      最近更新 更多