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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个基于Mule的企业服务总线的案例(关于JMS)

發布時間:2024/9/27 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个基于Mule的企业服务总线的案例(关于JMS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面向服務架構的關鍵字之一就是ESB。以前很多廠商靠買消息服務器來提供集成交互的方案,然后出現了SOAP和REST。

早期的嘗試基本上都是通過定一個固定的消息格式,例如xml來讓各個系統交換。但是這些消息格式本身經常需要修訂,就給集成帶來了很大的麻煩。

最好的解決方案就是每個應用還是用自己支持的接口,例如EDI或者SOAP,然后構建一個可以集成各種結構的聚合器,每一個應用的接口就開發成聚合器的一個端口。這樣一個cobol寫的應用就可以和一個j2me的應用交互,而不需要知道彼此的技術細節。

常見ESB供應商比較

Product

Vendor

Connects with...

Matrix BusinessWorks

TIBCO

SOAP, EMS, JMS, Rendezvous, MQ, BPEL

Mule ESB

Open-source, MuleSource, Inc.

SOAP, REST, JMS, MQ, JBI, AQ, Caching, JavaSpaces, GigaSpaces, Email, IM, JCA, AS400 Data Queues, System I/O.

OpenESB

Open-source, Sun Microsystems

JBI, JCA, JAX-RPC, JAX-WS

Sonic ESB

Progress Software

JMS, SOAP, JMX

Websphere ESB

IBM

JMS, MQ, SOAP; requires additional adapters to interface with other products and legacy protocols; requires Websphere to work

這里少了一個ServiceMix。

下面是這個案例的細節:

本案例用到的程序包括:

  • AMD-based 2.6 GHz 4 GB RAM, and Intel-based 3 GHz 4 GB RAM servers
  • Solaris 10 and Ubuntu Linux Dapper Drake
  • Java Run-time Environment 1.5.9
  • Mule current general availability package
  • A commercial JMS provider
  • Commercial applications for order capture, inventory management, order management, fulfillment, and reporting

    假設有一個項目要集成很多企業級應用程序,出于開發周期的壓力,我們選擇集成而非重新構建的策略。也就是說order capture, inventory management, order management, fulfillment, and reporting 這些都購買現成的廠商的,我們只需要集中開發一個內容管理系統。

    通過和其它六家廠商的協商,他們都提供了JMS和SOAP的接口。因此我們需要一個專業的JMS服務器。

    下面我們來看看配置文件:

    <Mule-configuration id="Enterprise-Applications-Mashup" version="1.0"> 首先定義一個Mule和JMS交互的連接器,相當于一個連接池
    ?
    <connector name="jmsConnector" className="org.Mule.providers.jms.JmsConnector">
    ???
    <properties>
    ?????
    <property name="jndiProviderUrl"
    ??????????????? value
    ="bitjmsnaming://172.28.63.209:7222"/>
    ?????
    <property name="connectionFactoryJndiName"
    ??????????????? value
    ="QueueConnectionFactory"/>
    ?????
    <map name="jndiProviderProperties">
    ???????
    <property name="java.naming.factory.initial"
    ????????????????? value
    ="com.bitco.bitjms.naming.bitjmsInitialContextFactory"/>
    ???????
    <property name="java.naming.security.principal" value="admin"/>
    ???????
    <property name="java.naming.security.credentials" value=""/>
    ?????
    </map>
    ?????
    <property name="username" value="admin"/>
    ?????
    <property name="password" value=""/>
    ???
    </properties>
    ?
    </connector>
    ?? 然后定義一些端點,每個端點都是一個外部供應商程序的接口
    ?
    <global-endpoints>
    ???
    <endpoint name="inJMSGTA"?????? address="jms://q.gta.in" connector="jmsConnector"/>
    ???
    <endpoint name="inJMSSeebelle"? address="jms://q.seebelle.in" connector="jmsConnector"/>
    ???
    <endpoint name="inJMSYenta"???? address="jms://q.yenta.in" connector="jmsConnector"/>
    ???
    <endpoint name="inJMSCatwire"?? address="jms://q.catwire.in" connector="jmsConnector"/>
    ???
    <endpoint name="inJMSBitco"???? address="jms://q.bitco.in" connector="jmsConnector"/>
    ???
    <endpoint name="outJMSGTA"????? address="jms://q.gta.out" connector="jmsConnector"/>
    ???
    <endpoint name="outJMSSeebelle" address="jms://q.seebelle.out" connector="jmsConnector"/>
    ???
    <endpoint name="outJMSYenta"??? address="jms://q.yenta.out" connector="jmsConnector"/>
    ???
    <endpoint name="outJMSCatwire"? address="jms://q.catwire.out" connector="jmsConnector"/>
    ???
    <endpoint name="outJMSBitco"??? address="jms://q.bitco.out" connector="jmsConnector"/>
    ???
    <endpoint name="console"??????? address="stream://System.out" />
    ?
    </global-endpoints>

    ?
    <transformers>
    ???
    <transformer name="JMSMessageToObject"
    ???????????????? className
    ="org.Mule.providers.jms.transformers.JMSMessageToObject" />
    ???
    <transformer name="ObjectToString"
    ???????????????? className
    ="org.Mule.transformers.simple.ObjectToString" />
    ?
    </transformers>

    ?
    <model name="Enterprise-Applications-Mashup-JMS">
    ???
    <Mule-descriptor name="JMSMessageSwitchboard"
    ???? implementation
    ="org.Mule.components.simple.PassThroughComponent">
    系統只有一個inbound,也就是進入系統消息的定義,端口名稱叫做outJMSBitco,也就是說outJMSBitco發出一個指令,進入總線,然后Mule把這個消息轉換后發送給其它所有的outbound-router,離開總線,進入別的應用程序。
    ?????
    <inbound-router>
    ???????
    <global-endpoint name="outJMSBitco"/>
    ?????
    </inbound-router>

    ?????
    <outbound-router match-all="true">
    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSYenta" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter"
    ????????????????? expression
    ="OrderHistoryRequest" />
    ???????
    </router>???????????? 以下面這條為例:
    這條路由的意思是,將消息通過JMS發送給Siebel,JMS的頭要標上OrderHistoryResonse,這樣Siebel的消息隊列受到一條這個消息,Siebel知道對方要做什么操作,將OrderHistory查詢出來。
    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSSiebel" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter"
    ????????????????? expression
    ="OrderHistoryResponse" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSCatwire"/>
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="item" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSCatwire"/>
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="item_mapping" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSYenta"/>
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="PAMInventoryUpdate" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSGTA" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="CustomerSearchRequest" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSSiebel" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="CustomerSearchResponse" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSYenta" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="OrderDetailsRequest" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSSiebel" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="OrderDetailsResponse" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSYenta" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="OrderAddUpdRequest" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSSiebel" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="OrderAddUpdResponse" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSYenta" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="catwireCreateItem" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSGTA" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="catalogupdate" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSGTA" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="productupdate" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSGTA" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="skuupdate" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSYenta" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="gtaCreateOrder" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSYenta" />
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="gtaGetOrderDetails" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="openJmsOutbound"/>
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="XXXOrderUpdate" />
    ???????
    </router>????????????

    ???????
    <router className="org.Mule.routing.outbound.FilteringOutboundRouter">
    ?????????
    <global-endpoint name="inJMSBitco"/>
    ?????????
    <filter className="org.Mule.samples.jms.JMSHeaderFilter" expression="OrderRelease" />
    ???????
    </router>????????????
    這個端口的意思是把消息打印在DOS窗口上
    ???????
    <router className="org.Mule.routing.outbound.OutboundPassThroughRouter">
    ?????????
    <endpoint address="stream://System.out" transformers="ObjectToString" />
    ???????
    </router>
    ?????
    </outbound-router>
    ???
    </Mule-descriptor>
    ?
    </model>
    </Mule-configuration>

總結

以上是生活随笔為你收集整理的一个基于Mule的企业服务总线的案例(关于JMS)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。