目錄html
咱們在作企業集成項目的時候,常常會用到不少開源中間件,好比企業服務總線,消息中間件,服務框架等。在使用這些開源中間件的時候,咱們也趟過了不少的坑,EnjoyingSoft,就是享受這些軟件,其中積累的經驗分享給你們,但願爲開源事業作一份貢獻。這篇系列主要說的是企業服務總線Mule ESB。數據庫
Mule ESB在衆多開源的ESB中處於領先者的地位,MuleSoft公司也做爲獨角獸,2017年在紐交所上市。咱們做爲MuleSoft的合做夥伴也有幸參與其中,在六年多的時間裏,咱們使用Mule ESB企業版實施,或者在社區版基礎上擴展,使用Mule ESB社區版實施,幫助國內衆多的企業成功上線SOA項目。macos
使用Mule ESB的過程當中,體會到其快速的開發效率,以及優秀的架構設計。同時也深感國內這塊資料很是稀少,因此計劃使用8篇文章來寫Mule ESB的基礎課程系列。服務器
Mule ESB是世界上使用最普遍的開源企業服務總線(ESB)產品,已擁有超過數百萬的下載量,以及來自世界各地數十萬個開發人員,不少世界五百強企業選擇Mule ESB做爲企業集成平臺。經過Mule,企業能夠在短期內輕鬆地建立並集成應用服務,Mule ESB消除了系統集成的複雜度,使開發人員可以在異構系統和服務之間,輕鬆地構建出高性能的集成應用。架構
和傳統的ESB不同,Mule ESB是一個輕量級的ESB,內核基於SEDA模型和Spring框架構建。基於Spring,意味有着很是靈活的擴展性。同時Mule ESB不只僅是一個ESB,它也是流行的微服務體系中的一部分。這個系列咱們着重介紹它的ESB功能,後續咱們再着重介紹它的API管理等功能。app
和不少開源軟件同樣,Mule ESB分紅兩個版本,社區版和企業版。其中社區版是無償使用的。而企業版則須要付費訂閱使用,功能更強大。若是企業預算充足,則能夠選擇企業版。或者使用Mule ESB社區版,在社區版基礎上作擴展,在有技術支持的狀況下,一樣能夠收到良好的效果。框架
關於社區版和企業版的主要區別,能夠參照下表。如何選擇能夠參考具體的業務場景和企業狀況。Anyway,因爲Mule ESB是開源的,咱們在社區版上能夠有不少的靈活擴展。微服務
咱們來講一下Mule ESB的常見應用場景,能夠更好的理解Mule ESB到底能夠幫助咱們解決什麼問題。工具
舊系統改造,開放系統的服務能力。舉個例子,咱們有一個電商系統,須要調用SAP ERP的訂單接口來建立訂單。這個時候就須要將SAP的訂單服務暴露成咱們流行的Rest Service接口,以方便電商系統調用。固然電商系統能夠直接使用SAP的JCO包來調用SAP的BAPI Function,但顯然暴露一個通用的Rest Service更易於調用。使用Mule ESB實現以下:性能
系統集成。舉個例子,不少系統之間數據交互可能仍是用FTP目錄。尤爲是企業跟企業之間的數據交互,好比,A企業丟一個EDI 文件到B企業的FTP目錄,而後B企業會從FTP目錄下載解析並放置到數據庫。這個場景用Mule ESB實現就很方便。
ETL。市面上有不少開源的ETL軟件,其實Mule ESB也有ETL的功能,經過Flow設定ETL的數據轉換和數據流向。下圖就演示了Mule的ETL和數據分發功能。
用一個相對寬泛的標準來劃分,Mule ESB軟件能夠分紅兩部分。
一部分是客戶端,也就是基於Eclipse的Anypoint Studio,客戶端就是用來開發集成應用的,一般面向的用戶就是咱們的開發人員。因爲是基於Eclipse環境,因此Java開發人員會很熟悉,同時Anypoint Studio也能夠集成Git,SVN,Maven,Junit,Jenkins等一系列生態工具。
固然做爲其餘語言的開發人員也不用擔憂,Anypoint Studio是一個可視化的拖拽的開發環境,大部分的工做只須要使用鼠標拖拽組件,配置屬性便可。
還要一部分是服務端,也就是Mule Runtime,也能夠稱做Container,容器,注意不要跟Docker的概念混淆。這裏的Container指的是Java Container,你能夠大概想象成Tomcat相似的東西。客戶端開發的應用就部署運行在Mule Runtime中。
須要注意的是,Mule Runtime是一個獨立的Container,只依賴JDK,並不依賴其餘第三方的容器。服務器中只須要安裝JDK和Mule Runtime,便可運行Mule應用。還有一種不太常見的作法,就是把Mule App跑在第三方的容器裏(好比Tomcat等),經過對容器的擴展來支持Mule App。不過咱們不推薦這種作法,仍是推薦使用獨立的Mule Runtime,也就是官方說的Standalone版本。
Anypoint Studio是基於Eclipse構建的,你能夠在這裏下載到(Windows 64Bit,Mac 64Bit)。請根據你的客戶端的操做系統選擇對應的版本。咱們只要在Windows或者Mac電腦上安裝好JDK8以後,解壓縮Zip包,雙擊便可打開。打開的界面以下:
因爲Anypoint Studio默認只內嵌了Mule ESB企業版運行時,若是你想使用社區版的話,咱們還須要安裝Mule ESB社區版運行時。爲何客戶端也須要Runtime?這很容易理解,咱們開發調試都須要使用Runtime,難道你編寫代碼後,不運行和調試嗎-:)
安裝社區版運行時,可使用下列步驟。
點擊Help/Install New Software...菜單
在Work with下拉框中選擇Mule Runtimes for Anypoint Studio
選中Mule ESB Server Runtime 3.9.0 CE,CE就是Community Edition,社區版的意思。而後點擊Next一直到完成。
服務端不區分操做系統,你能夠從這裏下載到3.9.0版本的社區版Runtime。Mule ESB Runtime能夠運行在Windows,Linux,Mac等操做系統上,咱們推薦在生產環境使用Linux部署Mule ESB Runtime。服務端的安裝也很簡單,只要在服務器上安裝好JDK8以後,解壓縮Runtime便可。
咱們學習新的語言和框架都會使用經典的Hello world程序,這裏也不例外。咱們要作的就是,使用Mule ESB創建一個HTTP服務,當用戶訪問HTTP端口後,返回Hello world。開發步驟很簡單:
點擊File/New/Mule Project,新建Mule工程,這裏選擇使用CE版,也就是社區版,而後一步步Next直到完成。
拖入HTTP組件到空白的畫布中。
選擇畫布上的Http組件,在屬性頁面新增Connector Configuration,在彈出窗口設定偵聽的端口,注意不要和你本機的端口衝突。
拖入Set Payload組件,在屬性頁面,設定Value值,Hello word。
在工程項目上右擊彈出菜單,Run As/Mule Application。稍等片刻,Console窗口會出現"Mule is up and kicking",表示Mule已經開始工做了!
使用Postman訪問HTTP端口,返回Hello world,Mule。恭喜你,你是一個Mule開發者了 -:)
使用Mule ESB上手很是簡單,咱們後續會介紹更多的組件,好比你須要從數據庫獲取數據,那麼就使用Database,還有更多組件等待挖掘。
咱們已經在客戶端開發完成了Hello world,也順利跑起來了。可是如何部署到服務端呢。和常見的Java開發同樣,咱們也須要打包應用。這裏咱們用的是普通工程,咱們經過一個Export操做,便可導出Mule App(固然Mule App也支持Maven工程,能夠經過Maven打包)。在工程項目上右擊彈出菜單,Export...,而後在對話框中選擇Anypoint Studio Project to Mule Deployable Archive。注意這裏不要選中Attach project sources。
將導出的Zip包放入到Mule Runtime的apps目錄下,而後啓動Mule Runtime。若是是Linux或者mac,那麼在Mule Runtime的bin目錄下執行./mule
啓動命令。若是是Windows,雙擊執行bin目錄mule.bat便可啓動。
而後使用Postman訪問服務器,你會獲得和Studio同樣的效果。
本文同步發文於EnjoyingSoft Blogs ,CSDN,簡書
訪問EnjoyingSoft 網站,獲取更多Mule ESB 社區版 實施幫助。
歡迎轉載,但必須保留原文和此段聲明,且在文章頁面明顯位置給出原文連接,不然保留追究法律責任的權利。