Mule鏄竴涓熀浜嶦SB鏋舵瀯鐨勬秷鎭鉤鍙?Mule 鐨勬牳蹇冩槸涓涓熀浜嶴EDA錛圫taged Event Driven Architecture錛夌殑鏈嶅姟瀹瑰櫒錛岃瀹瑰櫒綆$悊琚О涓洪氱敤娑堟伅瀵硅薄錛圲niversal Message Objects /UMO錛夌殑鏈嶅姟瀵硅薄錛岃岃繖浜涘璞¢兘鏄疨OJO銆傛墍鏈塙MO鍜屽叾浠栧簲鐢ㄤ箣闂寸殑閫氫俊閮芥槸閫氳繃娑堟伅绔偣錛坢essage endpoint錛夋潵榪涜鐨勩傝繖浜涚鐐逛負(fù)浼楀鐙珛鐨勬妧鏈紝姣斿Jms, Smtp, Jdbc, Tcp, Http, Xmpp, file絳夌瓑錛屾彁渚涗簡綆鍗曞拰涓鑷寸殑鎺ュ彛銆?br />
Mule搴旂敤紼嬪簭閫氬父鏄氳繃緗戠粶鐢辮澶歁ule瀹炰緥緇勬垚錛堝疄闄呬笂涓涓簲鐢ㄩ噷闈㈠彧鑳芥湁涓涓猰ule瀹炰緥錛屽洜涓哄疄渚嬪惎鍔ㄤ箣鍚庡繀欏誨崰鐢ㄤ竴涓猼cp绔彛錛夛紝姣忎竴涓疄渚嬫槸鐢卞叿鏈変竴涓垨澶氫釜UMO緇勪歡鐨勮交閲忕駭瀹瑰櫒鎵鏋勬垚錛屾瘡涓涓猆MO緇勪歡閮藉寘鍚湁涓涓垨澶氫釜鑳芥敹鍙戜簨浠剁殑绔偣銆?br />浠ヤ笂鎻忚堪鍙互鐢ㄤ互涓嬪浘渚嬫潵璇存槑錛?br />
瀹為檯涓奙ule鏄敤涓涓厤緗枃浠舵潵鎻忚堪浠ヤ笂淇℃伅鐨勶紝涓涓吀鍨嬬殑閰嶇疆鏂囦歡濡備笅錛?br />
<
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鐨勪緥瀛愰噷閰嶇疆鏂囦歡鐨勪竴閮ㄥ垎錛宮ule-descriptor鑺傜偣鏄敤鏉ユ弿榪頒竴涓猆MO緇勪歡鐨勶紝鍦ㄨ繖涓厤緗枃浠墮噷鎻愪緵浜嗕袱涓猆MO緇勪歡錛屽湪姣忎竴涓猆MO緇勪歡閲屾湁涓涓垨澶氫釜绔偣錛坋ndpint錛夋潵鎺ユ敹鎴栧彂閫佷簨浠躲備篃璁鎬綘浼?xì)瑙夊緱杩欎釜閰嵕|枃浠惰繃浜庡鏉傦紝浠ヨ嚦浜庢棤娉曠悊瑙c傛病鍏崇郴錛屽湪浠ュ悗鐨勬枃绔犻噷灝嗕細(xì)榪涗竴姝ヨВ閲娿?br />
鍦∕ule瀹瑰櫒閲岄潰涓篣MO緇勪歡鎻愪緵浜嗕竴緋誨垪鐨勬湇鍔★紝渚嬪浜嬪姟綆$悊錛屼簨浠惰漿鍖栵紝璺敱錛屼簨浠跺鏍稿拰綆$悊絳夛紝Mule灝嗗璞″垎寮綆$悊鎰忓懗鐫鍙互灝哢MO緇勪歡浜ょ粰褰撳墠嫻佽鐨処OC瀹瑰櫒錛堟瘮濡俿pring錛夊幓鏋勯犮傝櫧鐒禡ule澹扮О涓巗pring鍙互瀹岀編緇撳悎錛岀劧鑰屽湪鎴戦氳繃涓緋誨垪瀹為獙涓彂鐜幫紝Mule涓巗pring緇撳悎榪樻槸鏈夎澶歜ug鐨勶紝甯屾湜Mule鑳藉湪涓嬩竴涓増鏈殑鏇存柊涓В鍐熾?br />
鏈変漢鍙兘浼?xì)璇村Q孧ule鍙槸涓涓狫ms瀹炵幇錛岀劧鑰孧ule涓嶄粎浠呮槸涓涓狫ms鏈嶅姟鍣紝鑰屼笖鍙互閫氳繃閰嶇疆鏉ヤ嬌鐢ㄥ嚑涔庢墍鏈夌殑Jms鏈嶅姟錛屾瘮濡傝ActiveMq銆丣Boss MQ銆丣oram OpenJms銆丱racle AQ銆丼eeBeyond銆丼pirit Wave銆?UberMQ銆乄eblogic Jms聽鍜?IBM WebSphere MQ銆備笌Spring涓鏍鳳紝Mule涓嶄細(xì)閲嶅閫犺疆瀛愶紝鑰屾槸浼?xì)鋴社敤鍦ㄥ綋浠婂紑婧愮ぞ鍖洪噷鎴愮啛鐨勪駭鍝併傛瘮濡傚湪webservice涓婏紝Mule鏀寔glue銆乤xis鍜寈fire銆傚浜庝笉鍚岀被鍨嬬殑榪炴帴錛堟瘮濡傝jms鍜寃ebservice錛夛紝Mule鎻愪緵浜嗕竴鑷寸殑鏈嶅姟鏉ョ鐞嗕簨浠剁殑嫻佸悜銆佽仈緋匯佷簨鍔°佸畨鍏ㄥ拰瀹℃牳銆?br />
鍦ㄤ嬌鐢∕ule涔嬪墠錛屽緢鏈夊繀瑕佺悊瑙d竴浜涙牳蹇冪殑姒傚康鍜屼笓涓氭湳璇備互涓嬪浘琛ㄧ畝鍗曠殑鎻忚堪浜嗕竴涓狹ule鏈嶅姟鍣ㄧ殑緇勬垚
涓嬮潰灝嗗鍥捐〃涓婄殑姣忎竴涓蹇佃繘琛岃В閲娿?/font>
The Mule Manager
Mule綆$悊鍣ㄦ槸Mule瀹炰緥鐨勪腑蹇冿紝瀹冪殑涓昏浣滅敤鏄鐞哅ule瀹炰緥涓悇縐嶅悇鏍風(fēng)殑瀵硅薄錛屼緥濡傦細(xì)榪炴帴鍣ㄣ佺鐐廣佽漿鎹㈠櫒銆傝繖浜涘璞¤鐢ㄦ潵鎺у埗鍦ㄧ粍浠朵腑娑堟伅鐨勬祦杞互鍙?qiáng)鍚懢l勪歡綆$悊鐨勬ā鍨嬫彁渚涙湇鍔°?br />
The Model
妯″瀷鏄湪浣犵粍浠朵腑琚鐞嗗拰鎵ц鐨勫鍣紝瀹冩帶鍒剁潃娑堟伅鍦ㄤ綘緇勪歡閲岀殑鏀跺拰鍙戙傞粯璁ょ殑Mule妯″瀷鏄熀浜嶴EDA鐨勶紝榪欐剰鍛崇潃瀹冧嬌鐢ㄤ簡涓縐嶉珮鏁堢殑鍩轟簬娑堟伅闃熷垪鐨勬ā鍨嬫潵杈懼埌鏈浣崇殑鎬ц兘銆?br />
UMO Components
UMO涔熷氨鏄疷niversal Message Object錛堥氱敤娑堟伅瀵硅薄錛夛紝榪欐槸涓縐嶈兘浠庝換浣曞湴鏂規(guī)敹鍙戞椂闂寸殑瀵硅薄銆俇MO瀵硅薄鍙互鏄綘鐨勪笟鍔″璞★紝鍦ㄦ秷鎭繘鏉ョ殑鏃跺欐墽琛屼綘鐨勪笟鍔¢昏緫錛岃繖鏄竴縐嶆爣鍑嗙殑JavaBean錛屾病鏈変換浣曠壒孌婄殑Mule浠g爜鍦ㄤ綘鐨勭粍浠訛紙UMO瀵硅薄錛夐噷闈紝Mule鏄浣曞湪浣犵殑瀵硅薄閲岃繘琛屾秷鎭敹鍙戠殑璺敱鍜岃漿鎹㈠彇鍐充簬浣犲湪緇勪歡閲岀殑閰嶇疆銆?br />
Endpoints
绔偣鏄疢ule閫氫俊鑳藉姏鐨勫熀鏈師鐞嗐備竴涓鐐瑰畾涔夊湪涓や釜鎴栬呮洿澶氱粍浠朵箣闂寸殑閫氫俊娓犻亾銆傚彲浠ラ氳繃閰嶇疆娑堟伅榪囨護(hù)鍣ㄣ佸畨鍏ㄦ嫤鎴櫒鍜屼簨鍔″鐞嗘潵鎺у埗涓涓鐐規(guī)槸濡備綍灝嗘秷鎭敹涓庡彂鐨勩?br />
External Applications
澶栭儴搴旂敤鍙互鏄換浣曠殑閬楃暀緋葷粺銆傚熀鏈笂錛屼換浣曞簲鐢ㄥ彧瑕佹湁涓縐嶆暟鎹紶杈撴柟寮忚兘閫氳繃Mule鐨勭鐐硅繘琛岄氫俊錛孶MO緇勪歡鏄笉鍏沖績鏄摢涓簲鐢ㄦ彁渚涚殑鏁版嵁銆佸簲鐢ㄩ儴緗茬殑鍦扮偣浠ュ強(qiáng)鏄敤浣曠浼犺緭鍗忚鐨勩?/font>

]]>