Mule是什么?
Mule是一个轻量级的基于Java的ESB消息框架,它允许用户快捷地连接多个应用并且在这些应用之间交换数据。Mule使用了SOA的体系结构思想,可以方便的集成已有的应用。它是可升级的、高分布式的对象代理,可以通过异步传输消息技术来无缝的处理服务与应用之间的交互。
Mule框架提供了一个可升级的环境,可以把自己的业务组件部署在里面。Mule管理所有组件之间的交互,不管它们是在同一个虚拟机中还是在internet上,也不管底层使用的传输方式。
Mule围绕着企业服务总线(ESB)架构进行设计,保证了不同的组件或者应用可以通过公共的消息总线进行交互,公共的消息总线一般是由JMS或者其他消息服务器来实现。
在应用中会使用不同的技术,包括JMS,Web Services,JDBC,HTTP等等,Mule可以很好地处理他们之间的交互。
Mule有以下的优点:
(1)Mule组件可以是你需要的任何类型。你可以很容易地集成一切从一个"plain old Java object"(POJO)到另一个框架的组件。
(2)Mule和ESB模型允许组件重用。不像其他的框架,mule允许你使用一个已有的组件而不需要改变。组件不需要任何特定的mule代码,并且没有要求的API。业务逻辑和消息逻辑保持完全分离。
(3)消息可以是任何格式,从SOAP到二进制图像文件。mule对体系结构不强制任何设计限制,比如XML消息或者WSDL服务。
(4)你可以以多种拓扑结构开发mule,不仅仅是ESB。因为它是轻量级的和可嵌入的,mule可以有效地减少到市场的时间,并且增强项目参评,比如安全性,可扩展性。
mulesorce提供了管理工具运行管理你的开发(Mule HQ)和基础设施(Mule Galaxy)。
理解消息框架
应用网络化的好处是使得一个应用能够发送数据到另一个应用。但是许多应用不能够读取和处理另一个应用的数据。Mule通过在应用之间提供一个消息框架以消息的方式读取、转换和发送数据来解决这个问题。一个消息是一个数据包,它可以在一个特定的管道(channel,也成为一个queue)中处理和发送。如下图所示:
理解Mule体系结构
该部分讨论了Mule体系结构的不同部分和他们如何处理消息和数据。这里使用了一个例子:一个公司需要为客户订单(order)产生发票(invoice),对这些发票执行一些处理后,把它们发送到运输部门以满足订单。
处理过程:
把业务逻辑和消息分离
Mule的一个优点是它能处理通过一系列协议发送的消息。例如,一个发票(invoice)可能是XML格式的,但是它可能通过HTTP到达,也可能是作为一个JMS消息,这取决于哪个应用创建了这个发票(invoice)。如果服务组件仅仅处理业务逻辑和数据,而不是消息本身,它是如何读取各种格式的消息的呢?
答案是:服务组件不知道如何读取消息,因为默认地,服务组件和消息格式是屏蔽的。取而代之,一个transport单独携带消息,transformer在router传递这个消息到服务组件之前改变消息的负载(比如刚才的invoice),它按照需要格式化使得这个服务组件可以读取。例如,如果一个XML invoice通过HTTP被发送,HTTP transport携带这个消息,router指导这个消息到达每一个服务组件以处理它,并且transformer按需要沿路改变这个invoice(比如从XML到一个Java对象)。所有的这些transporting,transforming和routing对于消息组件是透明的。
把所有的组织起来
Endpoint是配置的元素,是把所有服务组织起来的关键。你在inbound和outbound routers指定endpoint来告诉Mule使用哪个transport,把消息发送到哪里和服务组件需要接收哪个消息。一个endpoint的主要部分是地址(address),表达成URI,表示了使用的transport、地址和任意额外的参数。
下面说明上图所示的逻辑数据流:
(1)用户放一个order到公司网站,并且一个invoice被创建成一个XML格式并且提交到http://myfirm.com/orders。
(2)HTTP transport接收这个XML invoice并且把它包装成一个Mule message。这个用户数据服务的inbound endpoint设置成http://myfirm.com/orders,并且它的inbound router指定这个消息必须包含一个Java对象,所以HTTP transport准备转换这个XMLinvoice并且分发这个消息到这个服务。
(3)XML到对象 transformer把XML invoice转换成一个Java对象。
(4)这个transport把这个消息传给用户数据服务。
(5)用户数据服务组件查询master customer database(数据库)以获取关于永和的额外数据,并且更新invoice的数据。
(6)HTTP transport使用outbound router配置来决定它必须分发消息到http://myfirm.com/verify。
(7)HTTP transport使用Inventory Verification服务的inbound router配置来获取消息并且把它传输到服务组件。
(8)服务组件更新invoice,有那个warehoused的一个ID code,这个仓库有所有的现在库存的invoice。
(9)outbound endpoint 指定一个JMS地址,所有这个JMS transport分发这个消息到order fulfillment application,这个应用挑选订单。
Mule中的几个名次解释:
在下一篇文章中介绍了Mule的安装部署和使用例程。