2013-01-04 75 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頭。 –