2013-01-04 77 views
1

我有一个Spring集成应用程序,将传入文件放到通道上。从那里我希望能够将相同的文件发送到两个不同的处理管道(一个存档到S3,另一个解析内容),然后有一个下游组件可以识别何时两个处理都已成功处理,从而删除实际的本地文件。弹簧集成 - 聚合分散消息

语义就像是如果我需要一个Splitter/Aggregator,而不是分裂我需要复制它的消息。

有没有办法用可用的组件来实现这个目标,还是需要一些自定义类?

回答

3

是的,<publish-subscribe-channel/>(与apply-sequence="true")的工作方式类似于分路器 - 但是该频道的两个订户都会得到相同的对象。默认情况下,这两个分支将被串行执行,但如果要并行处理,则可以引入一个ExecutorChannel。

如果你想每个用户得到不同的File对象,你可以添加一个变压器...

<transformer ... expression="new java.io.File(payload.absolutePath)" />

+0

加里你,一如往昔,一个明星! –

+0

之后,我认为你在正确的轨道上使用聚合器来测试两个过程何时完成。在pub-sub通道侦听器完成时(文件名?)将发出的某个唯一键集合在一起,并设置release-strategy-expression为“#this.size()eq 2”。确保将MessageGroupStoreReaper配置为处理其中一个进程失败的情况。 –

+1

实际上,apply-sequence会添加序列大小,序列号和标准correlationId头。 –