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

时间:2015-01-27 17:22:36

标签: spring-integration

我注意到在运行了几天之后,这个消息从队列中消失了,没有任何已知的原因或跟踪,我必须重新启动它才能继续处理。 这背后是否有任何已知的原因,以及如何找出在这种情况下发生的事情以及解决方法。 我正在使用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.ThreadPoolTask​​Executor.execute(ThreadPoolTask​​Executor.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)

1 个答案:

答案 0 :(得分:1)

最有可能是堆栈上的问题(在用户代码中挂起)。使用jstack <pid>查看容器线程在达到此条件时正在执行的操作。