文章

WSO2 EI 學習筆記(ㄧ)訊息傳遞架構

WSO2 Enterprise Integrator (原名為 WSO2 ESB) 是一個輕量化、元件導向、基於Java的企業服務匯流排(Enterprise Service Bus ESB)。有關於ESB的入門介紹,可以參考這部說明的淺顯易懂的影片。WSO2 EI是基於 Apache WSO2 ESB可以讓開發者整合各項服務及應用更加有效率極容易,license 授權是基於 APACHE LICENSE, VERSION 2.0 100%的開源而且是免費。此外新版的 WSO2 ESB 也提供能連接例如Salesforce、Google、Microsoft Dynamics 365、Dropbox …..非常眾多雲端服務的能力。此篇文章主要是利用 ESB訊息傳遞架構 來學習及暸解 WSO2 Enterprise Integrator

下圖為WSO2 EI訊息傳遞架構圖 (Messaging Architecture)

當服務的調用端 (Service Consumer) 調用服務時,會經過以下步驟:

1. 訊息先透過傳輸層 (Transport) 進行傳遞

我們在傳遞訊息的時候必須要考慮我們的訊息是由什麼方式傳遞,這就是 Transport 所扮演的角色,Transport支援各種 Protocol例如 HTTP、HTTPS、JMS…. 完整的列表可參考 ESB Transports

2. 建立 Enterprise Integrate mediation engine 能讀取及了解的 XML

依照訊息的內容格式(content type),例如 SOAP、JSON、CSV… 選擇對應 message builder,將訊息從 raw data 轉換成後續 Enterprise Integrate mediation engine 能讀取及了解的 XML。

如果有特定的內容格式是預設不支援的,也可以自己撰寫 builders。可參考 Working with Message Builders and Formatters

3. Quality of Service (QoS)

接下來訊息或透過QoS元件確保的安全性及正確性。例如我們必須先檢查料號格式是否正確,客戶是否存在,客戶編號是否正確等等,或是訊息中的某些欄位是有加密的,我們也必須在此將其解密。詳細說明可參考 Applying Security to a Proxy Service

4. Mediation Engine

WSO2 EI 的 Mediation Engine 核心為 Apache Synapse 。以下列舉幾項重要功能:

4.1 訊息傳遞路徑 (Message Router)

Message Router 的,Message Router會以訊息的內容來決定如何轉遞訊息。我們可以用一般程式語言裡面常用到的 Switch 語法來理解 Message Router。我們會在 Message Router 中去定義或撰寫特定的邏輯,來決定該訊息內容會轉遞到哪個 Service 。

更完整的說明可參考 Message Router

4.2 訊息過濾 (Message filtering)

可以經由 WSO2 EI 中的 Message filtering 功能,將訊息依照所設定的邏輯傳遞至特定的路徑。也可以用程式語言常用到的 if/else 語法來理解這個功能。詳細可參考 Filter mediator

4.3 訊息轉換 (Message transformation )

當傳遞端及接收端有不一樣的資料格式,例如欄位名稱不同,欄位型態不同,欄位數量不同…等等。可參考 Message Translator 來進行轉換處理。 Mediator Engine 中的 PayloadFactory mediatorData Mapper mediator 可用來處理訊息轉換。可以藉有此功能增加或是刪減訊息內容,或是將訊息內容轉換到另一個格式,也可以在這邊進行資料驗證之類的處理。

4.4 豐富化內容 (Content enriching)

可以使用 Enrich Mediator 將訊息結合其他資料來源,以組成接收端需要的資料內容。

5. 建立接收端能讀取及了解的 RAW data

參照上述第2步驟,當訊息要回應到接收端時,訊息自然也需要從WSO2 EI的XML轉換回接收端所使用的 Protocol 及 data format。例如原本 FTP (UDP) 傳送進來的資料,透過步驟2的 message builder轉換為WSO2 EI能了解的XML,處理完之後,再透過本步驟中的 message formatter 轉換成 REST API (HTTP) 送到接收端。

以上 ESB訊息傳遞架構 流程圖說明了當發起了一個服務請求 (Request) 的時候,訊息是如何在 endpoint (服務端點) 間傳遞的。架構流程圖上的所有元件都可透過 WSO2 EI management console 監控及管理。