服务器闲置几个小时后,ActiveMQ停止接收消息

问题描述 投票:0回答:1

我最近几天一直在浏览论坛,并尝试了几乎所有我能找到的东西,但没有运气。

情况是:在我们的Java Web应用程序中,我们有ActiveMQ 5.7(我知道它已经很老了,最终我们将升级到更新的版本 - 但由于某些原因,它现在不可能)。我们只有一个经纪人和多个消费者。

当我启动服务器时(我已尝试为2,3,4和更多服务器执行此操作)一切正常。服务器相互通信,即时消耗QUEUE消息。但是,当我让服务器空闲时(例如最终要抓住一些睡眠;))就不再是这样了。消息卡在数据库中,不会消耗掉。将它们交付的唯一选择是重新启动服务器。

我的部分配置(我们将其保存在属性文件中,它是实际状态,但我尝试了许多不同的组合):

BrokerServiceURI=broker:(tcp://0.0.0.0:{0})/{1}?persistent=true&useJmx=false&populateJMSXUserID=false&useShutdownHook=false&deleteAllMessagesOnStartup=false&enableStatistics=true 
ConnectionFactoryURI=failover://({0})?initialReconnectDelay=100&timeout=6000 
ConnectionFactoryServerURI=tcp://{0}:{1}?keepAlive=true&soTimeout=100&wireFormat.cacheEnabled=false&wireFormat.tightEncodingEnabled=false&wireFormat.maxInactivityDuration=0 
BrokerService.startAsync=true 
BrokerService.networkConnectorStartAsync=true 
BrokerService.keepDurableSubsActive=false

你有线索吗?

java activemq
1个回答
0
投票

我实际上无法从上面提到的描述中告诉你原因,但我可以列出一些在我脑海中新鲜的检查。如果它们对您有效,请确认以下内容。

  1. 你能检查消费者的联系吗?
  2. 消费者会话仍然有效吗?
  3. 如果所有的消费者连接都已启动,那么检查线程转储是否活动的消费者线程(我假设你创建了消费者线程,如果我错了就纠正我)处于RUNNING或WAITING状态(这发生在我身边所有的消费者都是活跃的,但是其他一些线程在保持对Logger的锁定,同时发布消息为松弛并且消费者处于WAITING状态)因为服务器中的某些其他线程)。
  4. 检查每个使用者的Dispatch队列大小。检查每个使用者的预取,然后将Dispatch Queue size与Prefetch,refer进行比较
  5. 是否有分配给每条消息的JMSXGroupID?

您能告诉我们您的消费者/生产者/经纪人配置吗?

© www.soinside.com 2019 - 2024. All rights reserved.