2014-12-02 39 views
0

我想實現以下目標:春XD:管鏈分裂,加入和本地執行

  • 鑑於網址(PNG圖像)的列表,下載並行處理的文件(分割)
  • 轉換文件格式,用於並行處理下載的文件(例如png2jpg in.png out.jpg)
  • 等待,直到所有文件被轉換,然後取所有文件爲單個位置和做他們的最終操作(例如從所有圖像創建巨大的馬賽克圖像)

圖像轉換僅作爲示例提供。我的處理實際上更復雜,但我試圖通過我需要分割文件處理來獲得需求,並且我需要在連接操作之後對最終處理進行處理。

我有一個基本的想法如何Spring XD管道鏈接(類似於殼管道)。有一個分離器和一個聚合器。我的期望是,我可以將文件作爲對象傳遞給下一個管道。

但是,二進制對象,集合和分割/聚合操作在XD中如何一起玩呢?

如果你能爲我提供一個工作示例(例如爲簡單起見而不是轉換爲觸發shell任務「cat file1 file2> outputfile」),這對我非常有幫助。

[1] https://github.com/spring-projects/spring-xd/wiki/Processors#splitter

回答

1

它 「只是工程」。

XD使用Spring Integration下蓋;請參閱其關於分離器/聚合器的文檔。

Spring集成消息具有標頭和有效負載;該框架對有效載荷一無所知;它可以是任何你想要的。大概你會從網址列表開始,將它們分開,調用http來獲取每個網址的PNG內容。調用一些服務來完成轉換並將結果發送給聚合器。

拆分器在每條消息上設置標題(correlationIdsequenceSizesequenceNumber)。下游(默認)聚合器使用這些標題重新組裝結果(默認發佈策略是聚合組大小匹配sequenceSize標頭)。在你的情況下,結果將是圖像的Collection;聚合器之後的最終自定義處理器可以將該列表轉換爲最終的馬賽克。

編輯:

source | splitter | http-client | processor1 | aggregator | processor2 | file 

其中:

source - generates list of URLs 
http-client - fetches the PNGs (binary payloads) 
processor1 - convert to JPG 
processor2 - create mosaic 

您需要在源,處理器1和processor2自定義代碼;其餘的應該只是流定義中的配置。

EDIT2:

你可能想這是事件驅動的,所以也許這將是更好的:

http | json-to-object | splitter | http-client | processor1 | aggregator | processor2 | file 

,並發表您的網址作爲JSON的列表。

如果要輪詢源代替,類似觸發源會工作的自定義源...

<int:inbound-channel-adapter channel="output" 
     auto-startup="false" ref="myPojo" method="foo"> 
     <int:poller fixed-delay="${fixedDelay}" time-unit="SECONDS" /> 
    </int:inbound-channel-adapter> 

    <bean id="myPojo" class="foo.UrlGenerator" /> 

,並有foo()返回NULL,如果有沒有要處理的,或列表網址。

+0

你說這只是起作用,但你能舉個例子「怎麼樣」? – benjist 2014-12-02 20:25:20

+0

你能舉一個例子來說說生成源集合嗎? – benjist 2014-12-02 20:52:54

+0

似乎沒有json-to-object。它應該做什麼? – benjist 2014-12-03 01:07:55