Spring integration 中断MessageChannelPartitionHandler

Spring integration 中断MessageChannelPartitionHandler,spring-integration,spring-batch,Spring Integration,Spring Batch,我将JmsOutboundGateway与MessageChannelPartitionHandler一起用于分区批处理作业。我希望能够在handle方法中中断这段代码 Message<Collection<StepExecution>> message = messagingGateway.receive(replyChannel); Message Message=messagingGateway.receive(replyChannel); 从另一个线程,我试图

我将JmsOutboundGateway与MessageChannelPartitionHandler一起用于分区批处理作业。我希望能够在handle方法中中断这段代码

Message<Collection<StepExecution>> message = messagingGateway.receive(replyChannel);
Message Message=messagingGateway.receive(replyChannel);
从另一个线程,我试图在此线程上调用interrupt()。添加此功能的最佳方式是什么

澄清:

这种干扰确实有效。但是,每个收到响应的分区的线程都有一个堆栈跟踪(如下所示)。这些线程仍然处于阻塞状态,这会将它们从该线程池中拉出,并且它们对于后续分区作业不可用

            <b>Thread: springbatch.partitioned.jms.taskExecutor-1</b> :
        priority:5, demon:false, threadId:823, threadState:TIMED_WAITING<br />
        <blockquote>
            - waiting on <0xf483c36> (a
            java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)<br />sun.misc.Unsafe.park(Native
            Method)<br />java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)<br />
            java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082)<br />
            java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)<br />
            org.springframework.integration.jms.JmsOutboundGateway.obtainReplyFromContainer(JmsOutboundGateway.java:865)<br />
            org.springframework.integration.jms.JmsOutboundGateway.doSendAndReceiveAsync(JmsOutboundGateway.java:809)<br />
            org.springframework.integration.jms.JmsOutboundGateway.sendAndReceiveWithContainer(JmsOutboundGateway.java:649)<br />
            org.springframework.integration.jms.JmsOutboundGateway.handleRequestMessage(JmsOutboundGateway.java:580)<br />
            org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:134)<br />
            org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:73)<br />
            org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:115)<br />
            org.springframework.integration.dispatcher.UnicastingDispatcher.access$000(UnicastingDispatcher.java:52)<br />
            org.springframework.integration.dispatcher.UnicastingDispatcher$1.run(UnicastingDispatcher.java:97)<br />
            org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:52)<br />
            java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)<br />java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)<br />java.lang.Thread.run(Thread.java:744)<br />
            <br />
Thread:springbatch.partitioned.jms.taskExecutor-1:
优先级:5,demon:false,threadId:823,threadState:TIMED\u WAITING
-等待 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
sun.misc.Unsafe.park(本机) 方法)
java.util.concurrent.locks.LockSupport.parknos(LockSupport.java:226)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082)
java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
org.springframework.integration.jms.JmsOutboundGateway.getainReplyFromContainer(JmsOutboundGateway.java:865)
org.springframework.integration.jms.JmsOutboundGateway.dosendanderecieveasync(JmsOutboundGateway.java:809)
org.springframework.integration.jms.JmsOutboundGateway.sendAndReceiveWithContainer(JmsOutboundGateway.java:649)
org.springframework.integration.jms.JmsOutboundGateway.handleRequestMessage(JmsOutboundGateway.java:580)
org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:134)
org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:73)
org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:115)
org.springframework.integration.dispatcher.UnicastingDispatcher.access$000(UnicastingDispatcher.java:52)
org.springframework.integration.dispatcher.UnicastingDispatcher$1.run(UnicastingDispatcher.java:97)
org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:52)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:744)


如何访问这些线程以同时中断?

中断线程将起作用;但是,中断被捕获(并且中断位在
队列通道
中重新设置)

在此之后,收到的消息为空,因此分区处理程序将抛出一个
MessageTimeoutException


目前无法确定超时是由于实际超时还是中断造成的。

中断线程将起作用;但是,中断被捕获(并且中断位在
队列通道
中重新设置)

在此之后,收到的消息为空,因此分区处理程序将抛出一个
MessageTimeoutException

目前无法确定超时是由于实际超时还是中断造成的