領先一步
VMware 提供培訓和認證,以加速您的進展。
了解更多在我關於 Spring Integration 的演講之後,我收到了很多關於澄清和範例的問題。為了滿足需求,我將開始一個關於使用 Spring Integration 實作不同整合模式的小系列。第一篇文章將著重於基礎知識。它將向您展示如何啟動並執行,並逐步引導您完成其中一個範例。
如果您以前從未聽說過 Spring Integration,那麼最好先閱讀 Mark Fisher 撰寫的 介紹性部落格 或瀏覽專案網站,以熟悉它。 一般來說
讓我先聲明:您即將在此處看到的模式僅旨在說明 Spring Integration 提供的功能;語法可能因不同版本而異,並且您的系統可能需要額外的預防措施。
參與 Spring Integration 的第一步是下載專案並查看範例。那麼,讓我們從這裡開始
在範例專案的 cafe 套件中,您將找到所有與 著名的星巴克故事 實作相關的程式碼。為了向您介紹架構,我將追蹤從開始 (Cafe) 到結束 (Barista) 的訂單流程
首先,訂單由 CafeDemo 建立。它包含兩種飲品,一種熱飲,一種冷飲。然後,訂單被包裝在訊息中並放置在 'orders' 通道上。監聽 'orders' 通道的端點是一個分割器 (OrderSplitter),在 split 方法中,訂單被分割成多個 Drinks,這些 Drinks 又被框架包裝成單獨的訊息。
在被分割並放置在 'drinks' 通道上之後,飲品將由 DrinksRouter 處理。此路由器負責將熱飲放置在 'hotDrinks' 通道上,將冷飲放置在 'coldDrinks' 通道上。這兩個通道都由不同的端點處理,這些端點分別使用 Barista 上的 prepareHotDrink 和 preprareColdDrink 方法。
讓我們跟隨訊息流經相關的程式碼片段:在 cafeDemo.xml bean 定義檔中,您可以看到 Cafe 被配置為一個 bean。 <beans:bean id="cafe" class="org.springframework.integration.samples.cafe.Cafe"> <beans:property name="orderChannel" ref="orders" /> </beans:bean>
此 bean 由 CafeDemo main 方法用於將訂單訊息放置在訂單佇列中。 Cafe cafe = (Cafe) context.getBean("cafe"); DrinkOrder order = new DrinkOrder(); Drink hotDoubleLatte = new Drink(DrinkType.LATTE, 2, false); Drink icedTripleMocha = new Drink(DrinkType.MOCHA, 3, true); order.addDrink(hotDoubleLatte); order.addDrink(icedTripleMocha); for (int i = 0; i < 100; i++) { cafe.placeOrder(order); }
A<context:component-scan ...../>正在使用於cafeDemo.xml以引導 OrderSplitter 和 DrinkRouter。
OrderSplitter 灑上了一些註解
@MessageEndpoint(input="orders", output="drinks") public class OrderSplitter {@Splitter
public List<Drink> split(Message<DrinkOrder> orderMessage) {
return orderMessage.getPayload().getDrinks();
}
}
DrinkRouter 也以類似的方式裝飾了註解,這些註解告訴 Spring Integration 將其用作路由器。從 @Router 註解方法傳回的字串被 Spring Integration 解釋為輸出通道。 @MessageEndpoint(input="drinks") public class DrinkRouter {
@Router
public String resolveDrinkChannel(Drink drink) {
return (drink.isIced()) ? "coldDrinks" : "hotDrinks";
}
}
路由之後,訊息會根據其溫度在 hotDrinks 或 coldDrinks 通道上可用。
配置為呼叫 Barista 上適當方法的端點在 xml 中配置:
您可以看到輸入通道和饋送訊息的方法都已定義,因此 Spring Integration 知道該怎麼做。
請注意,您不需要自己解包訊息:接受 payload 類型作為輸入參數也可以。如果您將 Barista 中的方法變更為接受 Message public void prepareColdDrink(Message
試玩一下範例,如果您有任何問題,請在論壇上發文。您會發現他們已經非常樂於助人(主要是因為 Mark 回覆幾乎每篇文章)。下一集將介紹 EIP 的另一個實作。