java - 修复了任务执行器的延迟

标签 java multithreading spring-integration router splitter

我的项目有一个 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/

相关文章:

c - 如何检查 libpcap 中的数据包可用性

java - Spring Integration 轮询目录

C# ThreadStaticAttribute 标记的字段在线程死亡时自动释放?

http - Spring XD - 找不到名称为 'ftphdfs' 且类型为 'source' 的模块

java - 在 spring Integration dsl 中配置 spring 事务

java - 从另一个 Lambda 函数异步启动 AWS java Lambda 函数

java - Enumeration<T> 在哪里实现?

java - 如何使用 SAX 对 xml 文件进行排序

java - 如何在 log4j_config.xml 的appender标签中给出动态文件路径?

ios - 如何在 ObjC、iOS 中解析数据时内联显示数据