消息驱动通道适配器停止处理消息
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>
查看遇到此情况时容器线程正在做什么。
我注意到几天后 运行 这停止使用队列中的消息,没有已知原因或痕迹,我必须重新启动它才能继续处理。 这背后是否有任何已知原因,以及如何找出在这种情况下发生的情况以及解决方法。 我正在使用 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>
查看遇到此情况时容器线程正在做什么。