日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

关于MULE ESB相关的介绍

發(fā)布時(shí)間:2024/9/27 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于MULE ESB相关的介绍 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 簡(jiǎn)介

Mule ESB是一個(gè)基于Java的輕量級(jí)企業(yè)服務(wù)總線和集成平臺(tái),允許開(kāi)發(fā)人員快速便利地連接多個(gè)應(yīng)用,并支持應(yīng)用間的數(shù)據(jù)交換。Mule ESB支持集成現(xiàn)有系統(tǒng)而無(wú)論其底層采用何種技術(shù),如JMSWeb ServicesJDBCHTTP以及其他技術(shù)。

2. 整體結(jié)構(gòu)

圖 整體結(jié)構(gòu)

從上圖可見(jiàn),Mule通過(guò)Transports/Connectors與外圍的異構(gòu)系統(tǒng)連接,提供Routing(路由)、Transaction Management(事務(wù)管理)、Transformation(轉(zhuǎn)換)、Message Broker(消息代理)、Transportation Management(傳輸管理)、Security(安全)等核心模塊。Mule可以單獨(dú)使用,也可以架設(shè)在常用的應(yīng)用服務(wù)器上。

圖 架構(gòu)簡(jiǎn)圖

外圍系統(tǒng)的服務(wù)請(qǐng)求通過(guò)Mule ESBTransport接入,Mule通過(guò)Transformer進(jìn)行數(shù)據(jù)的格式轉(zhuǎn)換,然后經(jīng)過(guò)Inbound Router進(jìn)行消息過(guò)濾(內(nèi)部通過(guò)配置filter實(shí)現(xiàn))后交給MuleComponent進(jìn)行業(yè)務(wù)邏輯處理,處理后的結(jié)果通過(guò)Outbound Router確定傳遞給哪個(gè)接收方,然后通過(guò)Transformer進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,通過(guò)Transport連接至接收方,傳遞信息。

此圖描述的是Mule中的一個(gè)典型場(chǎng)景的處理過(guò)程,涵蓋了Mule中的各個(gè)關(guān)鍵組件。其中某些處理步驟不是必須的,如Inbound Router、Transformer。后續(xù)可以看到一些其他場(chǎng)景的處理。

3. 功能

a. 服務(wù)中介

  • 將業(yè)務(wù)邏輯和消息發(fā)送分離

  • 屏蔽服務(wù)的消息格式和協(xié)議
  • 提供任意位置的服務(wù)調(diào)用
  • 提供協(xié)議橋接

b. 數(shù)據(jù)轉(zhuǎn)換

  • 在應(yīng)用間交換不同格式的信息
  • 操作消息的負(fù)載內(nèi)容,包括加密、壓縮和編碼轉(zhuǎn)換
  • 在異構(gòu)的傳輸協(xié)議的數(shù)據(jù)類型間格式化消息

c. 消息路由

  • 基于消息內(nèi)容和復(fù)雜規(guī)則路由消息
  • 消息的過(guò)濾、聚合以及重新排列序號(hào)

d. 服務(wù)創(chuàng)建和托管

  • 暴露端點(diǎn)、EJBSpring Bean以及POJO作為服務(wù)
  • 作為輕量級(jí)的服務(wù)容器進(jìn)行服務(wù)托管

Mule ESB中有一些基本的概念,理解這些基本概念后才能理解Mule的內(nèi)部機(jī)制。從中也可以看到Mule解決問(wèn)題的基本思路。

4. 基本概念

4.1 Model

Model表示托管各個(gè)服務(wù)的運(yùn)行時(shí)環(huán)境。

圖 Model

4.2 Service

Service是用來(lái)處理服務(wù)請(qǐng)求的基本單位,它調(diào)用各個(gè)組件進(jìn)行服務(wù)請(qǐng)求的處理。

圖 Service

4.3 Transport

Transport管理消息的接收和發(fā)送,數(shù)據(jù)轉(zhuǎn)換的過(guò)程也是在Transport中通過(guò)調(diào)用Transformer完成的。

圖 Transport

4.3.1 Connector

Connector用于管控特定協(xié)議的使用,如HTTP ConnectorJMS Connector等。

4.3.2 End-Point

Endpoint用于表示一種協(xié)議的特定使用方式,如listening/polling、從中讀取、向指定地址寫(xiě)入等,定義了發(fā)送和接收消息的通道。Endpoint控制的是底層的實(shí)體在Connector中如何被使用。

Endpoint定義于InboundOutbound Router中。

4.4 Transformer

Transformer用于轉(zhuǎn)換消息的內(nèi)容。

圖 Transformer

4.5 Router

Router使用Filter基于消息中的屬性信息進(jìn)行消息的分發(fā)。

圖 Router

RouterService中的位置決定了Router的性質(zhì)(inboundoutboundresponse)和擔(dān)任的角色(pass-throughaggregator等)。

4.6 Component

ComponentService的核心部件,是Service的業(yè)務(wù)邏輯的實(shí)現(xiàn)。

圖 Component: implicit bridge component

Component可以是Java Class(POJO、Spring Bean)、Web Service、Script等。

Component可定義自己的生命周期:initialisestartstopdispose,不過(guò)需要實(shí)現(xiàn)MuleLifeCycle接口。Mule 3.0版本開(kāi)始提供@PostConstruct@PreDestroy的注解,對(duì)應(yīng)生命周期的initialisedispose階段,不需要實(shí)現(xiàn)MuleLifeCycle接口了。

4.7 Flow(@since 3.0)

FlowMule 3.0新引入的,包含一個(gè)消息源(Message Source)和多個(gè)消息處理器組成的處理器鏈。

圖 Flow

根據(jù)實(shí)際需求著重檢查了一下Mule ESB的消息傳遞方式。Mule支持常用的幾種消息傳遞方式,能夠滿足要求。

5. 消息傳遞方式

5.1 異步方式

異步方式是一種單向調(diào)用,調(diào)用者不需要獲得響應(yīng)。

圖 Asynchronous

異步方式通過(guò)inboundoutbound endpointexchange-pattern=”one-way”實(shí)現(xiàn)。

使用基本的Stdio Transport驗(yàn)證,通過(guò)標(biāo)準(zhǔn)輸入傳輸字符串,將其原樣傳遞給標(biāo)準(zhǔn)輸出進(jìn)行顯示。相應(yīng)配置如下:


xml 代碼
  • <service name="echo">???
  • ??? <inbound>???
  • ??????? <stdio:inbound-endpoint system="IN" exchange-pattern="one-way" />???
  • ??? </inbound>???
  • ???????
  • ??? <component>???
  • ??????? <singleton-object class="demo.mule.umo.StdIo" />???
  • ??? </component>???
  • ???????
  • ??? <outbound>???
  • ??????? <pass-through-router>???
  • ??????????? <stdio:outbound-endpoint system="OUT" exchange-pattern="one-way" />???
  • ??????? </pass-through-router>???
  • ??? </outbound>???
  • </service>???
  • 運(yùn)行服務(wù),控制臺(tái)顯示結(jié)果如下:
  • Please enter: Hello, world!???
  • INFO? 2010-12-07 19:21:18,877 [ConsoleConnector.dispatcher.1]???
  • ??? org.mule.lifecycle.AbstractLifecycleManager: Initialising:???
  • ??? 'ConsoleConnector.dispatcher.23255376'. Object is: StdioMessageDispatcher???
  • INFO? 2010-12-07 19:21:18,877 [ConsoleConnector.dispatcher.1]???
  • ??? org.mule.lifecycle.AbstractLifecycleManager: Starting:???
  • ??? 'ConsoleConnector.dispatcher.23255376'. Object is: StdioMessageDispatcher???
  • Hello, world!???
  • 其中INFO輸出是Mule第一次初始化相應(yīng)Connector打印出來(lái)的,之后調(diào)用服務(wù)不會(huì)再次顯示。

    異步方式適用于簡(jiǎn)單的消息傳遞的場(chǎng)景。

    5.2 請(qǐng)求-響應(yīng)方式

    請(qǐng)求-響應(yīng)方式即請(qǐng)求方調(diào)用服務(wù)后,服務(wù)立即處理并返回響應(yīng)結(jié)果,不需將消息再次傳遞。

    圖 Request-Response

    請(qǐng)求-響應(yīng)方式通過(guò)input endpointexchange-pattern=”request-response”實(shí)現(xiàn),相應(yīng)配置如下:


    xml 代碼
  • <strong>?
  • ??? <strong>?
  • ??????? <model name="services">???????
  • ??????????? <service name="echoService">???????
  • ??????????????? <inbound>???????
  • ??????????????????? <inbound-endpoint address="http://localhost:7007/services/Echo"???????
  • ??????????????????????? exchange-pattern="request-response">???????
  • ??????????????????????? <cxf:jaxws-service />???????
  • ??????????????????? </inbound-endpoint>???????
  • ??????????????? </inbound>???????
  • ??????????????? <component>???????
  • ??????????????????? <singleton-object class="demo.mule.umo.Echo" />???????
  • ??????????????? </component>???????
  • ??????????? </service>???????
  • ??????? </model>?
  • ??? </strong>?
  • </strong>???
  • 邊是通過(guò)service配置的,通過(guò)flow配置如下:

    xml 代碼
  • <flow name="EchoFlow">???????
  • ??? <inbound-endpoint address="http://localhost:7007/services/Echo"???????
  • ??????? exchange-pattern="request-response" />???????
  • ??? <cxf:jaxws-service serviceClass="demo.mule.umo.Echo" />???????
  • ??? <component>???????
  • ??????? <singleton-object class="demo.mule.umo.Echo" />???????
  • ??? </component>???????
  • </flow>???
  • 在瀏覽器中輸入“http://localhost:7007/services/Echo/echo/text/hello,world”,瀏覽器中會(huì)顯示“hello,world”的輸出信息。

    請(qǐng)求-響應(yīng)方式適用于單次服務(wù)調(diào)用的場(chǎng)景。

    5.3 同步方式

    同步方式即請(qǐng)求方調(diào)用服務(wù)后,component將處理結(jié)果發(fā)送給另一個(gè)外部服務(wù)處理,并將處理結(jié)果反方向返回。

    圖 Synchronous

    同步方式通過(guò)inboundoutbound endpointexchange-pattern=”request-response”實(shí)現(xiàn),相應(yīng)配置如下:


    xml 代碼
  • <flow name="echo">?????
  • ??? <inbound-endpoint address="http://localhost:7007/services/Echo"?????
  • ??????? exchange-pattern="request-response" />?????
  • ??? <cxf:jaxws-service serviceClass="demo.mule.umo.Echo" />?????
  • ??? <component>?????
  • ??????? <singleton-object class="demo.mule.umo.StdIo" />?????
  • ??? </component>?????
  • ??? <vm:outbound-endpoint path="vm" exchange-pattern="request-response" />?????
  • </flow>?????
  • <flow name="vm">?????
  • ??? <vm:inbound-endpoint path="vm" exchange-pattern="request-response" />?????
  • ??? <component>?????
  • ??????? <singleton-object class="demo.mule.umo.Vm" />?????
  • ??? </component>?????
  • ??? <stdio:outbound-endpoint system="OUT" exchange-pattern="one-way" />?????
  • </flow>???
  • 同步方式適用于通過(guò)Mule調(diào)用遠(yuǎn)程服務(wù)的場(chǎng)景。

    5.4 異步請(qǐng)求-響應(yīng)方式

    異步請(qǐng)求-響應(yīng)方式即請(qǐng)求方調(diào)用服務(wù)后不需要立即獲得返回結(jié)果,component將請(qǐng)求發(fā)送給其他外圍系統(tǒng)處理(可能有多個(gè)),全部處理完畢后通過(guò)指定的異步應(yīng)答Router返回給請(qǐng)求方。

    Asynchronous Request-Response

    異步請(qǐng)求-響應(yīng)方式通過(guò)在OutBound Endpoint中增加reply-to以及增加async-reply節(jié)點(diǎn)實(shí)現(xiàn),響應(yīng)配置如下:


    xml 代碼
  • <flow name="echo">?????
  • ??? <inbound-endpoint address="http://localhost:7007/services/Echo"?????
  • ??????? exchange-pattern="request-response" />?????
  • ??? <cxf:jaxws-service serviceClass="demo.mule.umo.Echo" />?????
  • ??? <component>?????
  • ??????? <singleton-object class="demo.mule.umo.StdIo" />?????
  • ??? </component>?????
  • ??? <vm:outbound-endpoint path="vm" exchange-pattern="request-response" />?????
  • </flow>?????
  • <flow name="vm">?????
  • ??? <vm:inbound-endpoint path="vm" exchange-pattern="request-response" />?????
  • ??? <component>?????
  • ??????? <singleton-object class="demo.mule.umo.Vm" />?????
  • ??? </component>?????
  • ??? <stdio:outbound-endpoint system="OUT" exchange-pattern="one-way" />?????
  • </flow>???
  • 異步請(qǐng)求-響應(yīng)方式適用于請(qǐng)求需要被多個(gè)遠(yuǎn)程服務(wù)并行處理,結(jié)果需要匯總處理后返回的場(chǎng)景。

    注:上述代碼未運(yùn)行通過(guò),queue1和queue2獲得了請(qǐng)求消息并正常處理,但返回至async-reply時(shí)拋出異常,暫未定位到問(wèn)題。

    后將collection-async-reply-router改為single-async-reply-router未報(bào)異常,代碼示例如下:

    xml 代碼
  • <em><service name="async req-rep">?????
  • ??? <inbound>?????
  • ??????? <stdio:inbound-endpoint ref="stdioInEndpoint" />?????
  • ??? </inbound>?????
  • ??? <component class="demo.mule.umo.Echo" />?????
  • ??? <outbound>?????
  • ??????? <multicasting-router>?????
  • ??????????? <vm:outbound-endpoint path="async.queue1" exchange-pattern="one-way" />?????
  • ??????????? <vm:outbound-endpoint path="async.queue2" exchange-pattern="one-way" />?????
  • ??????????? <reply-to address="vm://reply" />?????
  • ??????? </multicasting-router>?????
  • ??? </outbound>?????
  • ??? <async-reply timeout="5000" failOnTimeout="true">?????
  • ??????? <vm:inbound-endpoint path="reply" exchange-pattern="one-way" />?????
  • ??????? <single-async-reply-router />?????
  • ??? </async-reply>?????
  • </service></em>?
  • 等有空看看collection-async-reply-router吧,或者自定義router。

    總結(jié)

    以上是生活随笔為你收集整理的关于MULE ESB相关的介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。