2016-01-08 41 views
0

我已经用ActiveMQ和Spring JMS做了一些测试。我已经配置DefaultMessageListenerContainer(DMLC)与WorkManagerTaskExecutor和CommonJ来管理线程。我想要控制服务器中正在运行的线程。DefaultMessageListenerContainer和ActiveMQ线程管理

我已经使用基于由克林斯曼奥莱在Spring的论坛写帖子DMLC的决定:http://forum.spring.io/forum/other-spring-related/remoting/24208-what-s-the-best-practice-for-using-jms-in-spring?p=256420#post256420

在这篇文章中,他说:“叶准直器是唯一的监听器容器不强加线程管理到JMS提供程序,即不使用/阻止JMS提供程序线程。“所以我认为所有线程都由服务器管理,并且不会有ActiveMQ的线程。

但是,使用JConsole分析服务器的线程,我看到了一些我没想到的ActiveMQ线程。

enter image description here

正如你可以在图片中看到,有ActimeMQ线程(线程不活动,运输线等)。

当我执行测试时,我在日志中看到JMS消息由CommonJ线程处理,而不是由ActiveMQ线程处理,所以没关系。但是,我不明白为什么不使用ActiveMQ线程。特别是“ActiveMQ Transport”线程,因为对于我使用的每个队列,我都有一个线程“ActiveMQ Transport”。因此,如果我消耗50个队列,则有50个“ActiveMQ Transport”线程。是否保持插座打开?这些线程是强制的吗?关于配置

详细说明:

  • ConnectionFactory一起使用:org.apache.activemq.ActiveMQConnectionFactory
  • ActiveMQ的版本:5.11.1
  • 传输协议:TCP
  • 使用使用DefaultMessageListenerContainer客户端处于一个调用MessageConsumer.receive()方法的循环。

这似乎是一个愚蠢的问题,当然我误解了一些基本概念。

+0

检查ActiveMQ客户端是否释放未使用的连接。怀疑这可能是这种情况。你使用的是ActiveMq PooledConnectionFactory吗?请添加您的activeMq版本和客户端配置的详细信息。 – Ashoka

回答