我们正在使用ActiveMQ 5.10代理进行以下配置

  • JVM堆48G,其中70%分配给memoryUsage

  • 70G存储和1G温度

我们使用Apache camel 2.10.2路由来消耗队列中的消息 . 收到消息后,我们使用spring的jmstemplate使用 asyncSend 创建~4k个较小的消息/接收消息并将它们发布到另一个队列 .

我们为使用pooledconnection的消费者和 生产环境 者配置了不同的 connectionFactory

当我们在队列中生成数百万条消息时,我们在producerConnectionFactory上配置了 producerWindowSize

问题:运行几个小时后,我们会在代理上生成大约1000万条消息,队列中的消费者开始消失 . 最终没有消费者,我们的系统就停止了 . 到目前为止,我们唯一的工作就是重新启动应用程序

问题:如果代理重启, asyncSend 生产环境 者与 producerWindoeSize 的行为是什么?

Update : 当camel消费者在队列中发送数百万条消息时,我可以通过重新启动代理来重现此问题 .

我打算在骆驼 JmsConfiguration 上设置 recoveryInterval ,请发表您对此的看法 .

Update:

我能够在消费者消失的jvm上捕获一个线程转储 . 线程在 生产环境 者窗口上被阻塞,waitForSpace() .

Camel (CamelContext) thread #573 - JmsConsumer[RequestQueue]" daemon prio=6 tid=0x0000000011ded000 nid=0x156c in Object.wait() [0x000000005b69d000]
   java.lang.Thread.State: WAITING (on object monitor) 
        at java.lang.Object.wait(Native Method) 
        at java.lang.Object.wait(Object.java:485) 
        at org.apache.activemq.usage.MemoryUsage.waitForSpace(MemoryUsage.java:67) 
        - locked <0x00000006a0bfc058> (a java.lang.Object) 
        at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:271) 
        at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:212) 
        at org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:79) 
        - locked <0x00000006a0bfbec8> (a org.apache.activemq.ActiveMQMessageProducer) 
        at org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:67) 
        at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:589) 
        at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:569) 
        at org.springframework.jms.core.JmsTemplate$4.doInJms(JmsTemplate.java:546) 
        at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:466) 
        at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:543) 
        at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:620)

即使内存使用率恢复正常,此等待也永远不会完成 . 我正在使用activeMQ 5.7客户端库

https://issues.apache.org/jira/browse/AMQ-4512

但是想知道,有没有有效的工作?即使我将消费者减少到1,我也会观察到这个问题 .