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

时间:2019-03-26 09:53:05

标签: java activemq

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

情况是:在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

您有线索吗?

1 个答案:

答案 0 :(得分:0)

我实际上不能从上述描述中告诉您原因,但是我可以列出一些新的检查方法。请确认以下内容是否对您有效。

  1. 您可以检查消费者连接吗?
  2. 消费者会议是否仍在进行?
  3. 如果所有使用者连接均已建立,请检查线程转储中活动的使用者线程(假设您创建了使用者线程,如果我输入错了,请更正)是否处于RUNNING或WAITING状态(发生这种情况)在我那里,所有使用者均处于活动状态,但由于服务器中存在其他线程,因此在向闲置消息发送消息时,其他一些线程在Logger上保持锁定,并且使用者处于WAITING状态。
  4. 检查每个使用者的调度队列大小。检查每个使用者的预取,然后将调度队列大小与预取refer
  5. 进行比较
  6. 您是否为每个消息分配一个JMSXGroupID?

您能详细介绍一下您的消费者/生产者/经纪人配置吗?