当嵌套链失败并到达错误通道时,任务执行器线程会被阻塞且不会返回池中。有没有办法指示流程已经结束,它们需要返回到池中。
例如,拆分器将有效负载拆分为3条消息。这些消息的服务方式如下 -
message 1 - fileChannelTaskExecutor1
message 2 - fileChannelTaskExecutor2
如果“嵌套链”网关调用成功,则第3条消息将被发送到任何早期释放的执行器线程中。
但是,如果“嵌套链”网关调用失败并到达errChannel,则上述两个执行器线程都会被阻塞并且不会返回到池中。因此,由于没有可用的线程池,后续消息(第3条消息)将无法处理。
<bean id="fileChannelTaskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="2"/>
<property name="daemon" value="false"/>
</bean>
<int:channel id="splitterResponseChannel">
<int:dispatcher task-executor="fileChannelTaskExecutor"/>
</int:channel>
<int:splitter input-channel="splitterRequestChannel" output-channel="splitterResponseChannel" >
<int:chain input-channel="splitterResponseChannel">
<int:gateway request-channel="nested-chain" error-channel="errChannel"/>
</int:chain>
<int:chain input-channel="errChannel" output-channel="nullChannel">
.....
</int:chain>
reply-timeout="0"
将释放该线程。只要您仅使用网关下游的直接通道,超时为 0 不会有任何影响 - 计时器直到线程返回网关才会启动。 - Gary Russell