第一章 基础原理
Mule 是一个轻量级的消息框架和整合平台,基于 EIP ( Enterprise
Integeration Patterns,由 Hohpe 和 Woolf 编写的一本书)而实现的。Mule
的核心组件是 UMO(Universal Message Objects,从 Mule2.0 开始 UMO 这一
概念已经被组件 Componse 所代替),UMO 实现整合逻辑。UMO 可以是
POJO,JavaBean 等等。它支持 20 多种传输协议
(file,FTP,UDP,SMTP,POP,HTTP,SOAP,JMS 等),并整合了许多流行的开源项
目,比如 Spring,ActiveMQ,CXF,Axis,Drools 等。虽然 Mule 没有基于 JBI
来构建其架构,但是它为 JBI 容器提供了 JBI 适配器,应此可以很好地与
JBI 容器整合在一起。而 Mule 更关注其灵活性,高效性以及易开发性。从
2005 年发表 1.0 版本以来,Mule 吸引了越来越多的关注者,成为开源 ESB
中的一支独秀。目前许多公司都使用了 Mule,比如 沃尔玛 ,惠普 ,索尼,Deutsche Bank 以及 CitiBank 等公司。
Mule 官方网站:http://www.mulesoft.org/
Mule 有两个版本,社区版和企业版。
社区版是免费,企业版是收费的,企业版相比于社区版功能丰富许多,它
们的比较如下:
Mule 近期推出了 Mule3,Mule3 的新增特点-云连接(Cloud Connect)
提供了可以用简单安全的方式为企业提供基于云技术的数据和服务。它的核心是
IBeans,一个轻量级、可重用的接口,用于 Web 技术的连接扩展和数据服务。
2.png
Mule 云包括以下内容
1、 Integration Beans (合成 bean):他们是可重用的云接口,可以注入到组
件中,可以接受外部的服务,比如说亚马逊、推特、Facebook 等,并且是一
种简单的接收服务、管理安全机制的方法。请求验证、数据传输、错误挂起
等也可以通过这种方法来实现。
2、 Rest / JAX-RS:(REST 协议:即 REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。)
现在 Jersey 已经是 Mule 核心部署的一部分,提供本地化的对 REST 和 JAX-RS的支持,例如 Apache CXF。Jersey 现在已经在易配置和高可扩展性方面做的非常优秀。Jersey 现在使用一种包含很多 Jersey 资源的接口实现组件来替
代终端类型的实现方式。
3、 AJAX:Mule 现在直接融合了 Javascript 应用。Mule3 包括了服务终端和
Javascript 客户端允许事件被直接发布到浏览器,并且事件可以从浏览器进
行发布。
4、 Web Service:现在对 Web Service 的发布的配置将更加容易,其扩展性也
进一步加强。
5、 ATOM and RSS:Mule 3 现在能够较好的支持 ATOM 了。
6、 JSON Support:Mule3 包含对 JSON 数据绑定和 JSON 传输的支持。
7、 JAXB Support:支持组件 XML 绑定将自动进行,并且也添加了新的 JAXB 传输。
其他的一些支持:
1、FLOW:配置的流程化。
2、Patterns:配置的模式化,可以极大简化配置,将不同情况的配置进行模式
化划分。
3、Annotation:改进后新的注释方法对组件中的注入反转、transformers 的发
布、组件方法的 Pol 有很大作用。
4、Deployment:支持单一服务和组服务的热部署。同时支持部署模型定义。
结构上的提高:
5、Message Processor API:消息处理 API,Mule3 其内部处理方式较为灵活,能够在将来其他模式调整时适应外部服务组件。
6、Message Exchange Patterns:消息交换模式,消息在 Mule3 中的流转将更加精确和灵活。
7、Message Property Scoping:消息属性作用域。较好的实现了属性的作用范
围。
8、Lifecycle Improvements:生命周期的改进。优化了 Mule 的开启和关闭行为,热部署也在这方面得以展现,并支持 JSR-250 生命周期注释方法。
9、Exception Handing:异常处理,异常处理的兼容性更好,并且有错误行为预
处理功能。
10、Automatic Transformation:自动转换,Mule3 增强了自动转换引擎,用于
进行数据绑定,例如 XML/JAX、JSON,并支持自定义。
11、CXF Now a Module:CXF 现在在 Mule3 中作为一个模块,在 Mule3 中对 CXF进行了优化,使得 CXF 的用户与普通的管道/过滤器元素一样。
12、REST:Mule 的开发团队十分看好 REST,在其文档中使用了“enjoy”这个单词来形容 REST,可见使用 REST 协议开发 Mule3 服务应该是比较合适的。
Mule3 其他的一些变化:
1、Message factories:消息工厂,从底层将消息翻译成 MuleMessage 格式。所
有 MuleMessage 都是由消息工厂创建的。
2、XQuery Support:对 XQuery 支持。
3、Dynamic Endpoints:动态终端,Mule 中的终端可以动态构造,通过 Mule 传输的消息可以构造终端地址。
4、JBoss jBPM:文档中说明 Mule 从很早以前就开始与 JBoss jBPM 进行整合了,但是在 Mule3 中,对其进行了改善,并将 JBoss jBPM 版本升级到了 4.4 版本。
5、Transaction Enhancements:Transaction 被增强,通过配置<xa-transaction>元素属性,Mule 可获知在 Mule 外部 Transaction 已经开始了。
6、AXIS Code Removed from Mule:AXIS 代码在 Mule3 中被移除,其将作为一个独立模块存在。
MuleESB 架构
一、 Understanding the Messaging Framework:对消息框架的理解
建立网络应用程序的优点之一,是一个应用程序可以将数据发送到另一个应
用程序。但是,许多应用程序没有能力直接读取或处理来自另一个应用程序的数
据。MuleESB 为此提供了一个消息处理框架,用于读取、转换和发送应用程序间的数据。
Mule 对消息(Message)的定义:一个消息是一个简单的、可以处理的、在
应用程序之间的一个通道(也称为队列)上发送的数据包。
3.png
在最基本的层面上,当应用程序连接 Mule,它从一个应用程序中读取数据,
根据需要把它转换,并把它发送到接收端应用程序。这可以整合所有类型的应用
程序,甚至包括没有内置集成的程序。
Mule 消息传递框架以企业服务总线(ESB)的架构为基础。 Mule 和传统 ESB
的区别是,MuleESB 只有在需要时转换数据。对于传统的 ESB,必须为每个应用程序创建一个连接到总线的连接,并将其传输数据转换成一个单一的共同通讯格式。因此需要处理每条消息而耗费大量的时间,开发时也需要更多精力。MuleESB消除了对单一消息格式的需要。MuleESB 支持多种消息管道,如 HTTP 或 JMS,消息在传输过程中,只有在需要时候进行翻译转换。因此,MuleESB 提高了性能,相比于传统 ESB 降低了开发时间。
二、 Understanding the Mule Architecture:了解 Mule 的架构。
官方文档使用了一个企业发票处理的例子来解释 Mule 架构。
4.png
(1) 首先介绍了 SOA 的优点。
(2) Processing the Date:数据处理。
当一条消息从一个应用程序(如从一个订单输入系统发票)发送,MuleESB 将其发送到服务,此服务是使用一些特定的业务逻辑(如核对客户和库存数据库)对这条消息进行处理 ,然后路由到正确的应用程序(如订单执行系统)。Mule 包含许多消息加工处理和消息路由的功能组件。处理流程的关键部分是服务组件。
服务组件执行业务处理,如阅读发票信息、逻辑分析、增加客户数据库信息等,
然后转发到订单执行应用,如下图。
5.png
Mule 中服务的重要特点是,它不具有任何 Mule 特定的代码,它可以仅仅是
一个 POJO,Java Bean,Spring Bean 或 WebService,包含在一个特定的方式处理数据的业务逻辑里。Mule 管理服务组件、配置设置绑定、发布服务,并确保配置的消息消息传递的正确性。可以有许多不同的服务组件,执行不同的业务逻辑。
(3) Routing Messages Between Service Components:服务组件间的消息路由。
服务组件中包含对消息中的数据进行的业务处理,但本身未包含关于如何发送和
接收消息的信息。为了保证服务组件对消息的正确接收和当处理完成后对消息的
正确路由,需要在配置 MuleESB 时,为组件设置 inbound router(入站路由)
和 outbound router(出战路由),如下图所示。
6.png
入栈路由指定的消息将被服务组件进行处理,并且可以过滤外来消息,对其
进行聚合和重新序列化。处理完成后的消息,将由出站路由指定发送路线。
(4) Separating Business Logic from Messaging:从消息中分离业务逻辑
Mule 众多优点之一,是它可以处理通过各种协议发送来的消息。并且服务
组件是完全屏蔽消息格式的,在消息路由转发之前,由 transformers 改变消息
的 payload,使得消息能够符合服务组件要求的格式,这样服务组件就可以直接
读取消息了。消息的传输、转换和路由,对于服务组件来说是完全透明的,如下
图所示。
7.png
Transformers 对于 Mule 的数据交换十分重要,因为它能够将数据转换成服
务组件或应用程序可以直接使用的格式,并且是在需要时候才转换,不需要时不
进行转换,机制比较合理。可以通过设置多个 transports 来处理多个渠道中的
数据。
将业务处理和数据转换分离,这样就会带来很大的灵活性,因为这样能够专
心考虑业务逻辑,不用过多考虑数据格式。在官方文档中也说明了,服务组件也
支持使用没有经过转换的原始数据格式。
(5)、Wiring Everything Together:连接协同工作
连接协同工作的关键是终端所配置的元素信息。在出站路由和入站路由中指
定终端,使得 MuleESB 能够知道使用哪个 transport 进行消息转换,将消息发送到哪个服务组件进行处理,处理后将消息发向哪里。终端的重要属性是地址,终端地址采用统一资源标识符(URL)表明使用哪个 transport、transport 位置、和其它一些参数,下图描述了连接协同工作处理过程。
8.png
一个服务可以接收来自多个 transports 发送来的消息,但是必须进行配置,
可以指定多个终端。
消息路由和终端有过滤器的功能,可以只接收特定的消息,不愿接收的消息
不接收。
总之,Mule 提供了一个简单的轻量级的方法来支持服务组件的开发,不需
过多考虑数据的传送和数据格式的转换。但是其它连接数据源的方法将会带来额
外的代码量。Mule 的使用将会提高服务组件的开发速度,并通过配置 XML 改变
其行为,而非普通 Java 代码。
三、Understanding the Logical Data Flow:通过发票处理这个例子,了解逻
辑数据流程。
上图步骤说明:
(1)、客户在公司网站上生成了一个订单,产生了一份发票,并将发
票内容以 XML 的形式提交给 http://myfirm.com/orders。
(2)、HTTP transport 接收这个 XML 发票信息,将其打包成 Mule 消
息。客户数据服务入站路由的终端设置为http://myfirm.com/orders,由于服务组件要求的消息格式是 Java object,所以入站路由设置入站消息必须包含一个 Java object,所以 HTTP transport 会将 XML 格式的发票转换成 Java object 类型,来适应相应服务。
(3)、将 XML 转换成 Java Object。
(4)、将转换完成的消息发送给服务组件。
(5)、客户数据服务组件从总客户数据库中查询客户信息,并更新发票信息到数据库。
(6)、HTTP transport 使用出站路由配置,确定将经过服务组件处理
后的消息发送到 http://myfirm.com/verify。
(7)、HTTP transport 使用入站路由中对发票验证服务的配置,将接
收到的消息发送到服务组件。
(8)、服务组件根据发票内容更新所有仓库清单信息。
(9)、出站终端配置要求的是一个 JMS 地址,所以 JMS transport 将消息发送到订单结束应用。
四、 Integrating Mule into Your Environment:将 Mule 整合到环境中。
Mule 是基于 ESB 架构的,消息是 ESB 的重要组成部分,其实现方法主
要使用 JMS,Mule 没有规定必须使用哪种消息中间件,可以使用 ActiveMQ
等主流消息中间件(Mule 也有自己的消息中间件产品 MuleMQ),除此之外支
持 EJB,mainframe applications、web service、socket 和文件系统的连
接。
Mule 还包括其它的拓扑结构:对等网络、C/S、hub-and-spoke 等。这
些拓扑可以混合在一个企业服务网络,构成模型丰富的企业信息服务模型,
如下图所示。
10.png
Mule 支持分布式使用和负载均衡,如下图所示:
11.png
可将 Mule 服务部署在 Web 容器或应用服务器中。
总结
在理解了 MuleESB 的全部架构理念和运行机制后,对 MuleESB 进行总结。
MuleESB 提供了一个消息框架,用于程序之间的数据交换。应用被封装成为服务,服务包含服务组件、消息路由和其它一些配置。Transport 使得服务间的数据在不同渠道内得以传送,并且 transport 在对数据的传输过程中,对需要格式转换的数据进行数据转换。
MuleESB 不是取代现有程序架构,相反 MuleESB 利用如 Apache CXF、Spring
等开源项目,对自己的项目进行了功能加强。MuleESB 得以较好的解决各个系统、各种平台、各种复杂情况的整合。
网友评论