我理解基于大小的聚合是如何工作的,但我也想让发布策略依赖于管道中的另一个步骤仍在运行。我的想法是,我将文件移动到某个目录“源”,聚合足够的文件,然后从“源”移动到“阶段”,然后处理分阶段文件。虽然这个过程正在运行,但我不想在阶段放置更多文件,但我确实想继续向源文件夹添加更多文件(该部分通过在聚合器之前使用与文件入站适配器连接的调度程序通道来处理)
<int:aggregator id="filesBuffered"
input-channel="sourceFilesProcessed"
output-channel="stagedFiles"
release-strategy-expression="size() == 10"
correlation-strategy-expression="'mes-group'"
expire-groups-upon-completion="true"
/>
<int:channel id="stagedFiles" />
<int:service-activator input-channel="stagedFiles"
output-channel="readyForMes"
ref="moveToStage"
method="move" />
因为您可以看到,如果现有的moveToStage服务激活器实例正在运行,我不想发布聚合消息。
我考虑过使stagedFiles频道成为一个队列频道,但这看起来并不正确,因为我确实希望将文件传递给moveToStage作为集合而不是单个文件,我假设将stagedFiles作为队列通道,它将发送一个单个文件。相反,我想达到一个门槛,例如10个文件,传递给stagedFiles,允许moveToStage处理这些文件,但是直到这一步完成,我希望聚合器继续聚合文件,然后释放所有聚合文件。
由于
答案 0 :(得分:1)
我建议您将一些标记作为AtomicBoolean
bean并在moveToStage#move
中使用它,并检查它的状态:
release-strategy-expression="size() >= 10 and @stagingFlag.get()"