【问题标题】:Spring Integration - parallel file processing by groupSpring Integration - 按组并行文件处理
【发布时间】:2014-10-08 10:20:15
【问题描述】:

我正在尝试通过一个简单的任务对 Spring Integration 进行实验。我有一个文件夹,我可以在其中获取传入文件。这些文件以组 ID 命名。 我希望按顺序处理同一 groupId 中的所有文件,但可以并行处理具有不同 groupId 的文件。

我开始整理这样的配置:

<int:service-activator input-channel="filesInChannel"
    output-channel="outputChannelAdapter">
    <bean class="com.ingestion.FileProcessor" />
</int:service-activator>

<int:channel id="filesInChannel" />

<int-file:inbound-channel-adapter id="inputChannelAdapter"
    channel="filesInChannel" directory="${in.file.path}" prevent-duplicates="true"
    filename-pattern="${file.pattern}">

    <int:poller id="poller" fixed-rate="1" task-executor="executor"/>
</int-file:inbound-channel-adapter>

<int-file:outbound-channel-adapter id="outputChannelAdapter" directory="${ok.file.path}" delete-source-files="true"/>

<task:executor id="executor" pool-size="10"/>

这是用 10 个线程处理所有传入的文件。我需要哪些步骤来按 groupId 拆分文件并让它们为每个 groupId 处理一个线程?

谢谢。

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    假设组 id 数量有限,您可以为每个组使用不同的适配器(使用单个线程;全部馈入同一通道);每个都有不同的模式。

    或者您可以创建一个自定义 FileListFilter 并使用某种线程关联性将每个组中的文件分配给特定线程,过滤器仅返回该线程的文件。

    【讨论】:

    • 谢谢。好吧,为了给你更多细节,我希望做的是动态调整正在处理文件的活动线程的数量,并使用可用线程的数量对组 ID 进行修改。我们是否需要为此为每个组创建不同的适配器?如果说我有一千个不同的组怎么办 - spring 集成有办法为每个 groupId%numberOfGroups 分配一个适配器吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多