我以编程方式创建,启动,停止和关闭应用程序中的Spring DefaultMessageListenerContainer
,作为管理其生命周期的更重要服务的一部分。
我还将这些DMLC注册为MBean,因此我可以从JConsole管理它们。
我无法“关闭”我的DMLC,这似乎是因为在我停止DMLC后总会有一个“活动”的调用者监听器不会消失。 我理解'receiveTimeout = -1'问题,我的是5秒(5000毫秒)。所以,这不是问题。
在调用“停止”操作后,我附上了我的JConsole DLMC属性的屏幕截图。您可以看到Running = false,但“ActiveConsumerCount = 1”。因此,shutdown()操作将挂起并且永远不会完全关闭我的容器。我如何完全停止&以编程方式关闭DMLC?
Spring版本是4.1.5 ActiveMQ 5.10.1
答案 0 :(得分:0)
5000 receiveTimeout
不应该出现问题。我建议你打开跟踪级别的调试 - 你应该看到线程每5秒记录一次。如果没有,则可能是线程被卡在上游某个位置(在侦听器中)。
进行线程转储(例如使用jstack)进行确认。