Spring Integration概覽

 現在什麼IOC(反轉控制),AOP(面向切面編程),DI(依賴注入)對於大多數java企業開發者(這裏指用spring來開發企業級應用的開發者)來說,已經是耳熟能詳了。那麼我們應該怎麼樣來集成Spring應用之間的系統呢?先去了解一下Spring目前提供分佈式的調用吧,方式有:如RMI,HttpInvok,Hessian和Burlap,這四種,配置都差不多,感興趣的話到網上搜一下,或者可以查閱Spring的相關書籍,這裏不再累述。
進入正題,邁入Spring 2.*之後,很多東西都有了改進。Spring Integration作爲一個Spring的孵化項目,我也是今年年初的時候才聽到的。(下個關注點應該就是Spring的工作流了)。Integration 可以通過xml和annotation來進行相應的配置。它的功能有點像EJB中的消息驅動bean,不過這裏換成了消息驅動Spring的bean了。
開始我們的旅程之前先廢話兩句,說說目標和原則。Integration 的目標是(比較官方的說法):
1.提供一個簡單的模型,實現企業系統的集成的解決方案
2.使用方便的,基於Spring應用的消息驅動行爲
3.使得更多的Spring用戶來使用它
原則是:
1.組件之間應該是鬆散的,模塊性的和易測的
2.應用框架應該強迫分離業務邏輯和集成邏輯
3.擴展節點應該有更好的抽象和可以再使用的能力
廢話不多說了,直接切入正題:
Spring Integration的主要組件包括以下部分,這裏務必瞭解這些概念,以便後續更好的理解整個集成的體系
1.Message
就是消息包括header(頭)和payload(負載)
message的header一般是id,時間戳或者目的地址什麼的,比如如果你發的消息是個文件,那麼header應該存放文件的名稱,如果是郵件那麼,header應該放目的郵件地址,from,cc等內容。至於payload負載,放什麼都行,隨你
2.Message channel
至於channel就好像一個管子,生產者生產一個消息到channel,消費者從channel消費一個消息,所以channel可以對消息組件解耦,並且提供一個方便的攔截功能和監控功能。這裏channel分兩種,一種是point-to-point點對點的,一種是publish-subscribe發佈訂閱形式的,這個和JMS是一樣的。(所有消息都是這樣的)。如果是點對點的channel,至少會有一個消費者consumer能收到發送的message,另一種訂閱發佈的channel,spring integration試圖去用廣播的形式發佈message給那些訂閱者subscriber,這些都被spring支持。其實採用哪種方式,最終是由用戶數量決定的。你也可以實現自己的message channel,這個後面再說。
再多說兩句,這塊還需要考慮channel的buffer以及consumer是否過載(consumer的數量)。
3.Message Endpoint
顧名思義,就是消息的終點,在channel你不能操作消息,只能在endpoint操作。在這裏,可以建立你自己的域模型。你不用修改你的代碼,這裏只是配置一下無侵入性的聲明就行而不需要你改動代碼。
4.Transformer
我管它叫變換者(不是機器戰警裏那個終結者,別記錯了),一個message transformer的作用就是把message的內容從一種形式變化到另一種形式。比如從xml文檔變成string.這個Transformer也可以增加,刪除,修改message的header。
5.filter
過濾器,一個message filter決定一個消息是應該被輸出的channel傳輸。可以用戶一個返回boolean的方法來檢查一個payload負載的內容類型(還記得payload吧),以及存在的header等等,如果一個消息被接收,它將會被髮送到output channel上,如果它沒有被接受那麼它就會被drop掉的。filter多用於publish subscribe模式中,很多consumer消費者可以收到相同的message並且可以用filter來接收指定類型的消息並將其加工處理。
6.router
路由器,決定哪個channel將被使用,一般來說,是由message的header中的內容或者元數據來決定的。一般router用於filter前期的路由轉換。
7.Splitter
分割器,是另一種message endpoint,把消息從input channel上分割發送到它的output channel上。比如用於把一個複合型的payload負載分割成很多子負載payloads。
8.Aggregator
集合器,也是message endpoint的一種,和splitter對應。用於把多種message組合成一個單一的message。事實上aggregator比splitter要複雜一些,因爲它需要維持message的狀態,決定什麼時候提供組合,什麼時候超時timeout,甚至可以將一個局部的結果放棄,併發送到一個隔離的channel裏。Spring integration提供了一個CompletionStrategy來配置timeout超時,是否在超時的時候發送一個結果並且廢棄這個channel(這裏應該是說消息廢棄這個channel)
9.service activator
服務催化者?這個沒法用中文來翻譯,我決定保留原文,這裏的service activator就是指一般意義上的message endpoint,用來連接應用的接口和message framework消息框架的組件,一個輸入的頻道input message channel必須被設定,一個service activator的方法被執行並且返回了一個值,那麼可以提供一個輸出頻道output message channel(如果消息提供自己的返回地址,那麼這是可選的)。這個規則適用於所有的consumer endpoints。輸入從input channel到service activator再到message handler,然後返回output message到service activator到output message channel。
10.channel adapter
頻道適配器,這也是個endpoint,用於連接其它系統或者transport傳輸器。channel adapter也分inbound內綁定和outbound外綁定。一般來說,它用於message和其他對象或者什麼東東的mapping,通過received-from或者sent-to這樣的系統(比如文件,http request,jms message,等等)Spring integration提供了很多形式的channel adapters,後續將一一介紹。總之我的理解就是這個東東是解決不同系統類型對象映射問題。

最後:這幾個概念在用Spring integeration開發的時候非常重要。還是那句話,學習這樣的模型,是有助於我們在開發中去處理各種複雜的需求,並且也可以提高自己的設計水平。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章