Mule - 企业服务总线

news/2024/7/8 4:15:20

一提到总线,一般学计算机专业的往往会联想到两样东西,一是网络拓扑上的总线结构,二是电脑主板上的总线。
和他们不同的是,企业服务总线是一种软件总线,但是他们都可以进行一定的类比。类比是快速学习最好的方法之一。

网络拓扑的总线由三个东西构成:网络设备(PC,服务器,交换机,路由器),端口(网卡-1个端口,路由器-n个端口),连接各个设备的网线,数据必须通过网卡端口传输到设备。
电脑主板上的总线也由三个东西构成。处理器(CPU,GPU),针脚(信号输入,输出的针脚),连接各个处理器的线路,同样在每一个时钟周期里,信号通过针脚进入处理器,再从别的针脚输出。

通过类比,可想而知,ESB软件上的总线必然也由吉祥三宝构成,在Mule里面,他们分别是UMO,End Point,数据的传输路线(当然这是无形的)。
UMO可以比喻成一个CPU,EndPoint就是这个CPU的针脚,数据从EndPoint(inbound)进入UMO,经过UMO的处理,从另一个针脚发送出(outbound),这样就完成了企业服务总线的一次最基本的操作。

 


Mule ESB最核心的概念:

1 UMO:从上面的描述可以看出,UMO就像一个CPU一样,它是业务应用的最基本单元。所有的业务逻辑都要写在UMO里面,例如收到一个请求发货请求的消息以后,我们首先检查库存是否足够,如果足够,那么生成一个发货单消息给仓库系统的接口。在这里面,检查存活和生成发货单是程序的业务逻辑,我们要开发一个进行该操作的UMO。
然后我们要定义该UMO的针脚,例如收到发货请求的接口,发出消息给仓库系统的接口。

2 Model:
Model包含了一组UMO,通常这一组UMO一起组成了一个应用。这就好比把一组小的CPU封装成一个大CPU来实现更复杂的功能。


3 End point:端点,就是我们前面说到的针脚,CPU只有通过针脚才能和外界交互,同样UMO必须通过End Point和别的系统交互。

Mule使用的关键,就是定义端点,这些端点就是系统交互的接口

 
    value="vm://VoipBrokerRequests"/>

 
    value="axis:http://localhost:service/proxyService"/>

 
    value="axis:http://localhost:service/buyService"/>

 
    value="axis:http://localhost:service/validService"/>

 
    value="axis:http://localhost:service/purService"/>



一些其它的概念:

Translator:翻译器,翻译不同的消息协议,例如将Java对象翻译成SOAP协议

Normalizer: 规整器,规整器可以理解为一个协调员,它管理着多个翻译员,比如来了一个美国人,就把它分配给一个英语翻译员,来了一个德国人,就把它交给一个德语翻译员。在软件系统中,同一种消息可能有不同的格式,例如申请书,我们允许用户直接网上申报,或者客户端填写完毕后作为附件发送邮件。这些消息在规整器这里被归类,如果是直接申报的消息,交给一个翻译器处理,如果是邮件申报上来的,交给附件翻译器处理。

Recipient list:接收消息用户列表,用于一个消息你可能想发送到多个机构,例如你填写了一个申请表要同时发送给好几个部门审批,可以把这些部门都写在一个Recipient list中,系统会自动发送,就像短信的群发一样。

Aggregator:如果某一个事件需要等待好几个消息到齐后才进行处理,就可以使用它。例如我将申报表,资格表等分别发送给不同部门审核,等这几个部门审核结果都发送回来以后,我才可以统一处理他们。

 

====
Mule的UMO组件是POJO,所以初学者往往弄不清楚这些POJO的组件如何和整个ESB进行交互。

Entry Point 入口点
当UMO接收到一个事件之后,Mule会调用该UMO组件的入口点。Mule会根据事件的负载类型自动的选择一个方法来调用。
这意味着一个UMO组件可以有很多入口点。
事件的负载类型是由该组件接收事件的接收器中的入口转换器决定的,但有一些接收器例如soap接收器会自动管理类型映射,因此它就不需要转换器。
如果UMO实现了Mule默认的事件接口org.mule.umo.lifecycle.Callable,则该方法总是会被调用。

Event Flow 事件流

Mule有一些默认的规则来管理进出组件的事件流。

1. 当接收到事件时,Mule首先按照上面的描述调用入口点方法
2. 返回消息或称出口消息使用下面的方法获得 -
a. 如果调用的入口方法返回不是void, (Callable.onEvent() 返回一个Object) 直接使用该方法的返回对象。如果返回对象为null,该请求将不会进行进一步处理。
b. 如果调用的入口方法返回是void,则调用该方法时候传递的参数将被作为返回对象,此时我们假定这些参数的值被改变了。

3. 出口事件会根据组件的配置来自动的路由
a. 如果配置了出站路由,则调用该路由。
b. 如果只配置了唯一一个出口端点,则调用它。
c. 如果有多个出口端点,第一个会被调用。 





http://www.niftyadmin.cn/n/3654357.html

相关文章

国家旅游局发布导游IC卡管理办法

国家旅游局去年的发布《关于印发导游IC卡发放管理办法(试行)》的通知,通知强调,自2011年1月1日起,由各省、自治区、直辖市和新疆生产建设兵团旅游局(委)(以下简称“省级旅游局”&…

Mule 1.4对JBPM的集成

Mule 1.4集成了JBPM功能,这样就能将ESB和BPM的优势相互结合起来。支持分成两种:1 ESB的事件触发JBPM的流程,配置如下:2 BPM流程触发ESB的事件

社保卡扩容之后:一卡通背后的博弈

转自http://news.rfidworld.com.cn/2011_09/fe3bf8e05334231f.html 未来五年内,一张成本不到25元的“社保卡”,同时具备记录社会保障个人信息和充当银行卡的双重功能。 8月30日,人力资源和社会保障部与中国人民银行正式启动全国范围内社会保障…

Mule+Spring+jbpm

法一:完全在spring.xml里面配置mule的所有内容该方法的缺点的是配置umo比mule语法更加繁琐法二:两个配置分件都用,不过mule里面需要加入一些mule-spring的标记其本质是将mule.xml转换成法一中的spring.xml该方法比较适合在现有的spring应用中…

广州“全能”社保卡计划年底发放

日前,记者从卫生厅了解到,为方便参合患者及时、安全、方便领取补偿款,晋中市祁县、平遥、榆社、左权、昔阳、灵石6县(市)新农合管理中心分别与中国农业银行各县支行签订了惠农卡代理协议。上半年通过惠农卡,共向4375人发放新农合补…

Java平台版本号的演变

Java平台得版本变化了几次,名称得叫法也发生了很大得变化。下面是我画得一个Java平台版本号的演变图,欢迎大家补充!Java Platform  JavaJava 2Standard Edition (Java SE)developer version1.11.21.31.41.51.61.7product version1.11.21.31…

江苏镇江明年有望实现市域就医一卡通

经镇江市政府第31次常务会议研究,镇江市日前出台了《关于推进医疗保险市级统筹的意见》,到2011年底,实现全市医疗保险市级统筹;2012年,全面实现本市区域范围内的异地就医“一卡通”。《意见》明确,镇江市推…

财政部:鼓励各类资本向物联网集聚

财政部企业司司长刘玉廷近日撰文提出,支持物联网企业借助资本市场筹措资金,多渠道、多层次地鼓励产业投资基金、创业风险投资基金、私募基金等各类社会资本向物联网集聚。 文章指出,针对我国物联网尚处于发展的起步阶段,产业…