消息驱动通道适配器停止处理消息

message-driven-channel-adapter stopped processing messages

我注意到几天后 运行 这停止使用队列中的消息,没有已知原因或痕迹,我必须重新启动它才能继续处理。 这背后是否有任何已知原因,以及如何找出在这种情况下发生的情况以及解决方法。 我正在使用 WMQ,需要在处理消息时维护事务。谢谢你。

 <jms:message-driven-channel-adapter  
                            acknowledge="transacted"  
                            destination="inboundQueue"  
                            channel="inboundChannel" 
                            auto-startup="false" 
                            max-concurrent-consumers="5" 
                            transaction-manager="transactionManager"
                            recovery-interval="60000"/>

我还想在此消费者线程上打开调试以打印它正在尝试获取消息,有没有办法做到这一点。

已编辑*

我看到这已经陷入僵局,请告诉我原因和可能的解决方案,谢谢。

"receivingTaskExecutor-12" - 线程 t@961 java.lang.Thread.State:已阻止 在 org.springframework.jms.listener.AbstractJmsListeningContainer.isRunning(AbstractJmsListeningContainer.java:348) - 等待锁定 "mqReceivingTaskExecutor-10" t@878 拥有的 <66a37d72> (a java.lang.Object) 在 org.springframework.jms.listener.DefaultMessageListenerContainer.scheduleNewInvokerIfAppropriate(DefaultMessageListenerContainer.java:715) 在 org.springframework.jms.listener.DefaultMessageListenerContainer.messageReceived(DefaultMessageListenerContainer.java:692) 在 org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:317) 在 org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:243) 在 org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1102) 在 org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:996) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:679)

锁定的可拥有同步器: - 锁定 <5a9e40d2>(一个 java.util.concurrent.ThreadPoolExecutor$Worker)


"receivingTaskExecutor-10" - 线程 t@878 java.lang.Thread.State: TIMED_WAITING 在 sun.misc.Unsafe.park(本机方法) - 停车等待 <35212499>(java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 在 java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) 在 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2081) 在 java.util.concurrent.LinkedBlockingQueue.offer(LinkedBlockingQueue.java:328) 在 org.springframework.integration.util.CallerBlocksPolicy.rejectedExecution(CallerBlocksPolicy.java:58) 在 java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:822) 在 java.util.concurrent.ThreadPoolExecutor. 执行(ThreadPoolExecutor.java:1373) 在 org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor.execute(ThreadPoolTaskExecutor.java:254) 在 org.springframework.jms.listener.DefaultMessageListenerContainer.doRescheduleTask(DefaultMessageListenerContainer.java:682) 在 org.springframework.jms.listener.AbstractJmsListeningContainer.rescheduleTaskIfNecessary(AbstractJmsListeningContainer.java:519) 在 org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1036) - 锁定 <66a37d72> (a java.lang.Object) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:679)

锁定的可拥有同步器: - 锁定 <78ff22ed>(java.util.concurrent.ThreadPoolExecutor$Worker)

很可能是堆栈上的问题(挂在用户代码中的某处)。使用 jstack <pid> 查看遇到此情况时容器线程正在做什么。