finly

          工作、讀書、運動

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            5 隨筆 :: 0 文章 :: 3 評論 :: 0 Trackbacks
          Mule是一個基于ESB架構的消息平臺,Mule 的核心是一個基于SEDA(Staged Event Driven Architecture)的服務容器,該容器管理被稱為通用消息對象(Universal Message Objects /UMO)的服務對象,而這些對象都是POJO。所有UMO和其他應用之間的通信都是通過消息端點(message endpoint)來進行的。這些端點為眾多獨立的技術,比如Jms, Smtp, Jdbc, Tcp, Http, Xmpp, file等等,提供了簡單和一致的接口。

          Mule應用程序通常是通過網絡由許多Mule實例組成(實際上一個應用里面只能有一個mule實例,因為實例啟動之后必須占用一個tcp端口),每一個實例是由具有一個或多個UMO組件的輕量級容器所構成,每一個UMO組件都包含有一個或多個能收發(fā)事件的端點。
          以上描述可以用以下圖例來說明:

          實際上Mule是用一個配置文件來描述以上信息的,一個典型的配置文件如下:
          < mule-descriptor? name ="Error?Manager" ?implementation ="errorManager" >
          ????????????
          < inbound-router >
          ????????????????
          < endpoint? address ="file://./test-data/in"
          ??????????????????????????transformers
          ="XMLToExceptionBean?ExceptionBeanToErrorMessage" ? />
          ????????????
          </ inbound-router >

          ????????????
          < outbound-router >
          ????????????????
          < catch-all-strategy? className ="org.mule.routing.LoggingCatchAllStrategy" />

          ????????????????
          < router? className ="org.mule.routing.outbound.FilteringOutboundRouter"
          ????????????????????????transformer
          ="ErrorMessageToException" >

          ????????????????????
          < endpoint? address ="file://./test-data/exceptions"
          ??????????????????????????????transformers
          ="ErrorMessageToExceptionBean?ExceptionBeanToXML" >

          ????????????????????????
          < properties >< property? name ="outputPattern" ?value ="Exception-${UUID}.xml" ? /></ properties >
          ????????????????????
          </ endpoint >
          ????????????????????
          < filter? className ="org.mule.routing.filters.PayloadTypeFilter"
          ????????????????????????????expectedType
          ="org.mule.MuleException" ? />
          ????????????????
          </ router >

          ????????????????
          < router? className ="org.mule.routing.outbound.FilteringOutboundRouter"
          ????????????????????????transformer
          ="ErrorMessageToException" >

          ????????????????????
          < endpoint? address ="smtp://?address=${email.toAddress}"
          ??????????????????????????????transformers
          ="ErrorMessageToExceptionBean?ExceptionBeanToXML?StringToEmailMessage" >
          ????????????????????????
          < properties >
          ????????????????????????????
          < property? name ="fromAddress" ?value ="${email.fromAddress}" ? />
          ????????????????????????????
          < property? name ="subject" ?value ="${email.subject}" ? />
          ????????????????????????
          </ properties >
          ???????????????????????
          </ endpoint >

          ????????????????????
          < filter? className ="org.mule.routing.filters.PayloadTypeFilter"
          ????????????????????????????????????????expectedType
          ="org.mule.umo.lifecycle.FatalException" />
          ????????????????
          </ router >

          ????????????????
          < router? className ="org.mule.routing.outbound.FilteringOutboundRouter"
          ????????????????????????transformer
          ="ErrorMessageToException" >

          ????????????????????
          < endpoint? address ="jms://exception.queue"
          ??????????????????????????????transformers
          ="ErrorMessageToExceptionBean?ExceptionBeanToXML?ObjectToJMSMessage" />

          ????????????????????
          < filter? className ="org.mule.routing.filters.PayloadTypeFilter"
          ????????????????????????????expectedType
          ="org.mule.samples.errorhandler.exceptions.BusinessException" />
          ????????????????
          </ router >
          ????????????
          </ outbound-router >

          ????????????
          < interceptor? name ="default" />
          ????????
          </ mule-descriptor >

          ????????
          < mule-descriptor? name ="Business?Error?Manager" ?implementation ="businessErrorManager" >
          ????????????
          < inbound-router >
          ????????????????
          < endpoint? address ="jms://exception.queue"
          ??????????????????????????transformers
          ="JMSMessageToObject?XMLToExceptionBean?ExceptionBeanToErrorMessage" ? />
          ????????????
          </ inbound-router >
          ????????
          </ mule-descriptor >

          以上是摘取官方網站上提供的一個叫errorhandler的例子里配置文件的一部分,mule-descriptor節(jié)點是用來描述一個UMO組件的,在這個配置文件里提供了兩個UMO組件,在每一個UMO組件里有一個或多個端點(endpint)來接收或發(fā)送事件。也許你會覺得這個配置文件過于復雜,以至于無法理解。沒關系,在以后的文章里將會進一步解釋。

          在Mule容器里面為UMO組件提供了一系列的服務,例如事務管理,事件轉化,路由,事件審核和管理等,Mule將對象分開管理意味著可以將UMO組件交給當前流行的IOC容器(比如spring)去構造。雖然Mule聲稱與spring可以完美結合,然而在我通過一系列實驗中發(fā)現(xiàn),Mule與spring結合還是有許多bug的,希望Mule能在下一個版本的更新中解決。

          有人可能會說,Mule只是一個Jms實現(xiàn),然而Mule不僅僅是一個Jms服務器,而且可以通過配置來使用幾乎所有的Jms服務,比如說ActiveMq、JBoss MQ、Joram OpenJms、Oracle AQ、SeeBeyond、Spirit Wave、 UberMQ、Weblogic Jms?和 IBM WebSphere MQ。與Spring一樣,Mule不會重復造輪子,而是會使用在當今開源社區(qū)里成熟的產品。比如在webservice上,Mule支持glue、axis和xfire。對于不同類型的連接(比如說jms和webservice),Mule提供了一致的服務來管理事件的流向、聯(lián)系、事務、安全和審核。

          在使用Mule之前,很有必要理解一些核心的概念和專業(yè)術語。以下圖表簡單的描述了一個Mule服務器的組成


          下面將對圖表上的每一個概念進行解釋。

          The Mule Manager
          Mule管理器是Mule實例的中心,它的主要作用是管理Mule實例中各種各樣的對象,例如:連接器、端點、轉換器。這些對象被用來控制在組件中消息的流轉以及向組件管理的模型提供服務。

          The Model
          模型是在你組件中被管理和執(zhí)行的容器,它控制著消息在你組件里的收和發(fā)。默認的Mule模型是基于SEDA的,這意味著它使用了一種高效的基于消息隊列的模型來達到最佳的性能。

          UMO Components
          UMO也就是Universal Message Object(通用消息對象),這是一種能從任何地方收發(fā)時間的對象。UMO對象可以是你的業(yè)務對象,在消息進來的時候執(zhí)行你的業(yè)務邏輯,這是一種標準的JavaBean,沒有任何特殊的Mule代碼在你的組件(UMO對象)里面,Mule是如何在你的對象里進行消息收發(fā)的路由和轉換取決于你在組件里的配置。

          Endpoints
          端點是Mule通信能力的基本原理。一個端點定義在兩個或者更多組件之間的通信渠道。可以通過配置消息過濾器、安全攔截器和事務處理來控制一個端點是如何將消息收與發(fā)的。

          External Applications
          外部應用可以是任何的遺留系統(tǒng)。基本上,任何應用只要有一種數據傳輸方式能通過Mule的端點進行通信,UMO組件是不關心是哪個應用提供的數據、應用部署的地點以及是用何種傳輸協(xié)議的。

          posted on 2006-11-21 10:12 finly 閱讀(2807) 評論(1)  編輯  收藏 所屬分類: SOA/ESB

          評論

          # re: Mule入門簡介 2006-11-21 10:37 SeamanWang
          頂!收藏!  回復  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 益阳市| 基隆市| 景德镇市| 敦煌市| 射洪县| 禹城市| 酉阳| 望都县| 武汉市| 孝感市| 大渡口区| 志丹县| 武乡县| 凉城县| 保德县| 萝北县| 和平区| 温宿县| 双牌县| 信阳市| 平遥县| 四平市| 东乡| 沁阳市| 渑池县| 奈曼旗| 南川市| 邢台县| 阿合奇县| 孟州市| 宝鸡市| 河津市| 广丰县| 醴陵市| 彰化市| 宝应县| 南京市| 东乡县| 樟树市| 都昌县| 海丰县|