【发布时间】:2018-10-02 20:21:18
【问题描述】:
我在我的应用程序中使用拆分器聚合器模式。 我有以下配置 -
<int:splitter inputChannel="CH1" outputChannel="CH2" ref="foo" method="bar"/>
<int:aggregator inputChannel="CH2" outputChannel="CH3" ref="oof" method="rab" ---other required configurations/>
<task:scheduler --with threadpool of size 30 />
<!--there are other channels as well. Some are queue and some are direct channels-->
我所有的频道(CH1、CH2、CH3)都是QueueChannel。
分配器输入通道 CH1 的源是一个文件。
在我的测试中,我观察到即使在 CH1 通道中添加两个文件,在给定时间也只会处理 1 个文件。所以我在我的 CH1 频道中添加了一个 Poller,现在 CH1 频道上的多个输入消息正在同时处理。
在聚合器方面,我观察到执行始终是单线程的,即直到第一个线程完成执行,第二个线程才开始执行。
到目前为止我为解决这个问题所做的尝试 -
- 将轮询器添加到
<int:aggregate>配置 - 将轮询器添加到输入通道 CH2(输入到聚合器)
- 将调度程序添加到输入通道 CH2
谁能帮我让聚合器也处理多线程。
更新1 我正在尝试做的事情:
我收到包含股票数据的文件。我为每个文件创建消息并将其放入 CH1 频道。 CH1 通道有一个拆分器,将其拆分为单独的记录并将其发送到 CH2 通道。 CH2 频道有一个与之关联的聚合器,它将尝试根据文件名聚合记录,并且“oof.rab”将记录写入数据库。我的期望是看到多个批次的同一文件同时写入数据库。
更新 2: 此处进行聚合以批处理行,以便我们可以将其以批处理模式将其写入数据库,而不是单独写入行
【问题讨论】:
标签: spring multithreading spring-integration