修复了任务执行者的延迟

时间:2015-06-05 16:10:39

标签: java multithreading spring-integration router splitter

我的proejct有一个-spring集成固定延迟轮询器(5分钟),它获得一堆记录 - 将它发送到拆分器,拆分器拆分记录并将它们发送到taskexector路由器通道,输出通道的池大小为2并发送每条记录以便在服务激活器处进一步处理并在聚合器处接收。流程正常。

但是,固定延迟将前一个执行时间视为将记录交给任务执行者的位置,而不是在聚合器通道完成和接收所有记录处理时。

如何让轮询器在完成所有记录处理后等待5分钟,而不是等待分割器通道切换5分钟?

配置:

使用spring integration 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>

---还为发送到aggretor的以下服务请求进一步配置

1 个答案:

答案 0 :(得分:0)

您必须暂停轮询器线程,直到完成所有异步下游操作。

一种方法是<service-activator/>内的阻塞队列,其中轮询器线程等待来自下游处理的信号继续。然后触发器将从那一点开始。