当前位置: 首页 > 知识库问答 >
问题:

队列使用者有挂起的消息,但未对其进行处理

常茂
2023-03-14

我正在使用activemq、camel和spring的组合。对于队列,我们有多个消费者;在一些队列消费者上,我们看到有挂起的消息(高达100条,与预取相同),它们根本没有得到处理,但同一队列的其他消费者,一切照旧。

我深入研究以了解发生了什么,发现spring cachingconnectionfactory可能导致了这个问题——我们怀疑这个缓存连接工厂可能会使一些客户端处于非活动状态,并且没有处理留在预取缓冲区中的消息。我们的发现正确吗?

除此之外,有什么方法可以从非活动消费者释放的预取缓冲区中获取消息?

共有1个答案

司寇羽
2023-03-14

您不得使用具有变量并发性的CachingConnectionFactory,否则您必须禁用消费者缓存;请参阅DefaultMessageListenerContainerjavadocs。

 * <p><b>Note: Don't use Spring's {@link org.springframework.jms.connection.CachingConnectionFactory}
 * in combination with dynamic scaling.</b> Ideally, don't use it with a message
 * listener container at all, since it is generally preferable to let the
 * listener container itself handle appropriate caching within its lifecycle.

否则闲置的消费者将被放入缓存中。

 类似资料:
  • 我对ActiveMQ有一个奇怪的问题。我有一个队列,似乎有一个挂起的消息,但当我打开队列时,没有消息。 这里怎么了?真的有消息等待处理吗?我怎样才能把信息带回来,或者至少能看到内容? 编辑:刚刚发现ActiveMQ 5.6.0的这两个错误。这可能是那个问题的根源吗? 不正确的报告挂起QueueSize的持久子后重新连接与未破解 OrderPendingList中的问题可能导致在持久子重新连接后无法

  • 我有两个消费者(不同的应用程序)连接到Azure队列。我可以或消息,在消费过程中,我可以或消息。裁判:http://msdn.microsoft.com/en-us/library/azure/hh851750.aspx. 我确定我想使用,然后消息,因为我希望它们在两个应用程序中被接收。我想我应该将队列上的消息生存期设置为10秒,作为删除机制。 然而,由于消息似乎在10秒钟后被删除,因此在这10秒

  • 我有一个中间件位于两个JMS队列之间。它从一个数据库读取、处理一些数据到数据库中,然后写入另一个数据库。 这里有一个小图来描绘设计: 考虑到这一点,我有一些有趣的逻辑要集成到服务中。 null

  • 我们有一个用例,其中我们只创建一个消费者来处理队列中的消息。消息处理器在确认之前积累一定数量的消息。以异步方式接收消息并使用事务会话。消息的大小非常小。 在一定数量的消息之后,主动MQ停止向唯一的消费者发送进一步的消息,并等待确认。我们尝试过像consumer.prefetchSize,consumer . maximumpendingmessagelimit;但是什么都不管用。我们用一个只有一个

  • 我们最近遇到了由RabbitMQ支持的应用程序的意外行为。RabbitMQ版本为3.6.12,我们使用的是.NET客户端5.0.1 应用程序订阅了两个队列,一个用于命令,另一个用于事件--我们还使用手动确认。我们的应用程序配置为有7个消费者。每个通道都有自己的通道(IModel),每个通道都有自己的EventingBasicConsumer,当EventingBasicConsumer.Recei

  • 我试图理解当以azure工作者角色托管消息队列使用者时的最佳实践。我有许多不同类型消息使用者,它们订阅不同的azure服务总线订阅(或者队列,如果您愿意这样称呼的话)。我想知道是应该在一个Worker角色中为每个使用者实例化多个线程,还是应该为每个使用者部署多个Worker角色。