又有免費Java電子書下了

gudesheng發表於2008-01-03

一提到匯流排,一般學計算機專業的往往會聯想到兩樣東西,一是網路拓撲上的匯流排結構,二是電腦主機板上的匯流排。
和他們不同的是,企業服務匯流排是一種軟體匯流排,但是他們都可以進行一定的類比。類比是快速學習最好的方法之一。

網路拓撲的匯流排由三個東西構成:網路裝置(PC,伺服器,交換機,路由器),埠(網路卡-1個埠,路由器-n個埠),連線各個裝置的網線,資料必須通過網路卡埠傳輸到裝置。
電腦主機板上的匯流排也由三個東西構成。處理器(CPU,GPU),針腳(訊號輸入,輸出的針腳),連線各個處理器的線路,同樣在每一個時鐘週期裡,訊號通過針腳進入處理器,再從別的針腳輸出。

通過類比,可想而知,ESB軟體上的匯流排必然也由吉祥三寶構成,在Mule裡面,他們分別是UMO,End Point,資料的傳輸路線(當然這是無形的)。
UMO可以比喻成一個CPU,EndPoint就是這個CPU的針腳,資料從EndPoint(inbound)進入UMO,經過UMO的處理,從另一個針腳傳送出(outbound),這樣就完成了企業服務匯流排的一次最基本的操作。

 


Mule ESB最核心的概念:

1 UMO:從上面的描述可以看出,UMO就像一個CPU一樣,它是業務應用的最基本單元。所有的業務邏輯都要寫在UMO裡面,例如收到一個請求發貨請求的訊息以後,我們首先檢查庫存是否足夠,如果足夠,那麼生成一個發貨單訊息給倉庫系統的介面。在這裡面,檢查存活和生成發貨單是程式的業務邏輯,我們要開發一個進行該操作的UMO。
然後我們要定義該UMO的針腳,例如收到發貨請求的介面,發出訊息給倉庫系統的介面。

2 Model:
Model包含了一組UMO,通常這一組UMO一起組成了一個應用。這就好比把一組小的CPU封裝成一個大CPU來實現更復雜的功能。


3 End point:端點,就是我們前面說到的針腳,CPU只有通過針腳才能和外界互動,同樣UMO必須通過End Point和別的系統互動。

Mule使用的關鍵,就是定義端點,這些端點就是系統互動的介面

      value="vm://VoipBrokerRequests"/>

      value="axis:http://localhost:service/proxyService"/>

      value="axis:http://localhost:service/buyService"/>

      value="axis:http://localhost:service/validService"/>

      value="axis:http://localhost:service/purService"/>



一些其它的概念:

Translator:翻譯器,翻譯不同的訊息協議,例如將Java物件翻譯成SOAP協議

Normalizer: 規整器,規整器可以理解為一個協調員,它管理著多個翻譯員,比如來了一個美國人,就把它分配給一個英語翻譯員,來了一個德國人,就把它交給一個德語翻譯員。在軟體系統中,同一種訊息可能有不同的格式,例如申請書,我們允許使用者直接網上申報,或者客戶端填寫完畢後作為附件傳送郵件。這些訊息在規整器這裡被歸類,如果是直接申報的訊息,交給一個翻譯器處理,如果是郵件申報上來的,交給附件翻譯器處理。

Recipient list:接收訊息使用者列表,用於一個訊息你可能想傳送到多個機構,例如你填寫了一個申請表要同時傳送給好幾個部門審批,可以把這些部門都寫在一個Recipient list中,系統會自動傳送,就像簡訊的群發一樣。

Aggregator:如果某一個事件需要等待好幾個訊息到齊後才進行處理,就可以使用它。例如我將申報表,資格表等分別傳送給不同部門稽核,等這幾個部門稽核結果都傳送回來以後,我才可以統一處理他們。

 

====
Mule的UMO元件是POJO,所以初學者往往弄不清楚這些POJO的元件如何和整個ESB進行互動。

Entry Point 入口點
當UMO接收到一個事件之後,Mule會呼叫該UMO元件的入口點。Mule會根據事件的負載型別自動的選擇一個方法來呼叫。
這意味著一個UMO元件可以有很多入口點。
事件的負載型別是由該元件接收事件的接收器中的入口轉換器決定的,但有一些接收器例如soap接收器會自動管理型別對映,因此它就不需要轉換器。
如果UMO實現了Mule預設的事件介面org.mule.umo.lifecycle.Callable,則該方法總是會被呼叫。

Event Flow 事件流

Mule有一些預設的規則來管理進出元件的事件流。

1. 當接收到事件時,Mule首先按照上面的描述呼叫入口點方法
2. 返回訊息或稱出口訊息使用下面的方法獲得 -
a. 如果呼叫的入口方法返回不是void, (Callable.onEvent() 返回一個Object) 直接使用該方法的返回物件。如果返回物件為null,該請求將不會進行進一步處理。
b. 如果呼叫的入口方法返回是void,則呼叫該方法時候傳遞的引數將被作為返回物件,此時我們假定這些引數的值被改變了。

3. 出口事件會根據元件的配置來自動的路由
a. 如果配置了出站路由,則呼叫該路由。
b. 如果只配置了唯一一個出口端點,則呼叫它。
c. 如果有多個出口端點,第一個會被呼叫。 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1600013


相關文章