參考:
http://www.blogjava.net/xmatthew/archive/2008/12/04/243443.html
需求: 小賣部有一個訂飲料服務,客戶可以通過訂單來訂購所需要飲料。小賣部提供兩種咖啡飲料
LATTE(拿鐵咖啡)和MOCHA(摩卡咖啡)。每種又都分冷飲和熱飲
整個流程如下:
1.有一個下訂單模塊,用戶可以按要求下一個或多個訂單。
2.有一個訂單處理模塊,處理訂單中那些是關於訂購飲料的。
3.有一個飲料訂購處理模塊,處理拆分訂購的具體是那些種類的飲料,把具體需要生產的飲料要求發給生產模塊
4.有一個生產模塊,進行生產。
5.等生成完成後,有一個訂單確認模塊(Waiter),把訂單的生成的飲料輸出。
大體流程如下:
一 設置一個網關接口 方法添加@Gateway(requestChannel="FirstChannle") 進行消息接收(注意:只是一個接口)
二 設置一個splitter端點連接firstChannle-secondChannle通道 在端點內將多咖啡訂單分成單咖啡訂單
三 設置一個router端點根據生產需要將secondChannle的數據路由到不同的通道(例如 按照冷熱cafe的分類將冷的輸出到coldChannle,將熱的輸出到hotChannle 直接在方法內返回"coldChannle"或"hotChannle "String即到相應通道)
四 根據生產需要 設置與路由的通道相對應的service-activator端點 這些端點統一連接一個fourthChannle通道 在service-activator端點方法內進行業務操作(例如 本次設置兩個方法(端點)與cold與hot通道進行相連 在方法類創建相應的cafe實例 再將其輸出到fourthChannle通道)
五 定義一個stream channel adaptor 裏面進行最後的操作(例如 發佈消息 輸出到控制檯 將cafe交到客戶手裏)
六 設置一個aggregator端點連接fourthChannle-stream channel adaptor 在該端點方法內將生產的產品輸出到fifthChannle 這個端點會自動將我們在splitter端點內分裂的信息根據消息頭合併(例如 將本次的單個訂單的單個cafe根據訂單信息合併爲單個訂單多個cafe再 統一輸出 可以配置completion-strategy="class" completion-strategy-method="method" 來自定義訂單(消息)合併規則)