【问题标题】:ActiveMQ stops receiving messages after servers left idle for few hoursActiveMQ 在服务器闲置几个小时后停止接收消息
【发布时间】:2019-04-03 16:15:08
【问题描述】:

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

情况是:在我们的 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】:

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

    1. 你能检查消费者连接吗?
    2. 消费者会话是否仍处于活动状态?
    3. 如果所有消费者连接都已启动,则检查线程转储活动的消费者线程(我假设您创建了消费者线程,如果我错了,请纠正我)处于 RUNNING 或 WAITING 状态(发生这种情况对我来说,所有消费者都处于活动状态,但其他一些线程在向 slack 发布消息时保持对 Logger 的锁定,并且消费者处于 WAITING 状态),因为服务器中有一些其他线程)。
    4. 检查每个消费者的调度队列大小。检查每个消费者的预取,然后将 Dispatch Queue 大小与 Prefetch 进行比较,refer
    5. 您是否为每条消息分配了一个 JMSXGroupID?

    您能否详细介绍一下您的消费者/生产者/代理配置?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 2018-01-18
      相关资源
      最近更新 更多