我注意到在运行了几天之后,这个消息从队列中消失了,没有任何已知的原因或跟踪,我必须重新启动它才能继续处理。 这背后是否有任何已知的原因,以及如何找出在这种情况下发生的事情以及解决方法。 我正在使用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"/>
此外,我想打开这个消费者线程上的调试来打印它试图获取消息,有没有办法做到这一点。
EDITED *
我发现这已陷入僵局,请让我知道原因和可能的解决方案,谢谢。
“receivingTaskExecutor-12” - 线程t @ 961 java.lang.Thread.State:BLOCKED 在org.springframework.jms.listener.AbstractJmsListeningContainer.isRunning(AbstractJmsListeningContainer.java:348) - 等待锁定&lt; 66a37d72&gt; (一个java.lang.Object)由“mqReceivingTaskExecutor-10”t @ 878拥有 在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) at org.springframework.jms.listener.DefaultMessageListenerContainer $ AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1102) at org.springframework.jms.listener.DefaultMessageListenerContainer $ AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:996) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615) 在java.lang.Thread.run(Thread.java:679)
锁定可拥有的同步器: - 已锁定&lt; 5a9e40d2&gt; (java.util.concurrent.ThreadPoolExecutor $ Worker)
“receivingTaskExecutor-10” - 线程t @ 878 java.lang.Thread.State:TIMED_WAITING 在sun.misc.Unsafe.park(原生方法) - 停车等待&lt; 35212499&gt; (java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) at java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2081) at java.util.concurrent.LinkedBlockingQueue.offer(LinkedBlockingQueue.java:328) 在org.springframework.integration.util.CallerBlocksPolicy.rejectedExecution(CallerBlocksPolicy.java:58) at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:822) at java.util.concurrent.ThreadPoolExecutor.execute(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) at org.springframework.jms.listener.DefaultMessageListenerContainer $ AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1036) - 已锁定&lt; 66a37d72&gt; (一个java.lang.Object) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615) 在java.lang.Thread.run(Thread.java:679)
锁定可拥有的同步器: - 已锁定&lt; 78ff22ed&gt; (java.util.concurrent.ThreadPoolExecutor $ Worker)
答案 0 :(得分:1)
最有可能是堆栈上的问题(在用户代码中挂起)。使用jstack <pid>
查看容器线程在达到此条件时正在执行的操作。