我的项目有一个 spring 集成固定延迟轮询器(5 分钟),它获取一堆记录 - 将其发送到分割器,分割器分割记录并将它们发送到输出 channel 处池大小为 2 的任务执行器路由器 channel ,并发送每个记录以在服务激活器处进一步处理并在聚合器处接收。流程运行良好。
但是,固定延迟将先前的执行时间视为将记录传递给任务执行器的时间,而不是所有记录处理完成并在聚合器 channel 接收的时间。
如何让轮询器在所有记录处理完成后等待 5 分钟,而不是在分离器 channel 移交后等待 5 分钟?
配置:
使用 spring 集成 2.2.0.RELEASE 和 spring 3.1.1.RELEASE 版本
<integration:channel id="splitterChannel"/>
<integration:channel id="serviceRequestChannel"/>
<integration:channel id="aggregatorChannel"/>
<task:executor id="taskExecutor" pool-size="2"/>
<integration:channel id="routerChannel" >
<integration:dispatcher task-executor="taskExecutor"/>
</integration:channel>
<integration:inbound-channel-adapter
id="inboundAdapter"
method="retrieveReadyRecords"
channel="splitterChannel"
ref="inboundChannelAdapter" auto-startup="true">
<integration:poller
trigger="batchtrigger"/>
</integration:inbound-channel-adapter>
<integration:splitter
input-channel="splitterChannel"
expression="payload"
output-channel="routerChannel"/>
<integration:recipient-list-router input-channel="routerChannel">
<integration:recipient channel="aggregatorChannel" selector-expression="xxx"/>
<integration:recipient channel="serviceRequestChannel" selector-expression="zzzz"/>
</integration:recipient-list-router>
--- 还可以进一步配置发送到聚合器的以下服务请求
最佳答案
您必须挂起轮询器线程,直到所有异步下游操作完成。
一种方法是在<service-activator/>
内使用阻塞队列。轮询器线程等待来自下游处理的信号以继续。然后触发器将从该点开始。
关于java - 修复了任务执行器的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30671113/