Mule介绍
什么是Mule
Mule是一个基于Java的轻量级消息框架,它可以使我们快速、容易地将我们的应用连接起来,并且保证这些应用间可以交换数据。Mule使用了面向服务架构(SOA),提供了对现有系统的简洁的集成方式。不管应用程序采用了什么技术,JMS、Web Service、JDBC、HTTP甚至其他的技术,Mule都可以准确无误地将它们集成到一起。
Mule框架具有很强的可扩展性,它允许我们开始只提供比较少的应用,然后再慢慢将更多的应用连接到其上。Mule透明地管理着应用和组件间的所有交互,不论这些应用和组件是处于同一台虚拟机上还是处在互联网上,不管他们底层使用了怎样的传输协议。
Mule是基于企业服务总线(ESB)的思想设计的。ESB的主要功能是扮演了在不同应用中传送数据的传输系统的角色让它们可以互相通信,不管这些应用是在内联网中还是跨越了互联网。现在市场上已经有几个商业应用的ESB产品,这些产品中许多只提供了有限的功能,或者是需要构件在已有的应用程序服务器或消息服务器之上,这就将你限制在了某个特定的提供商。Mule是一个中立的ESB产品,所以不同的提供商的产品都可以集成到其上,使用Mule,你不会被锁在某一个提供商的平台之上。
与竞争对手相比,Mule提供了很多优势,包括:
l Mule的服务组件可以是你想要的任意类型的。你可以很容易地把从POJO类到其他框架实现的组件的各种形式的应用集成起来。
l Mule和其ESB的模型提供了非常可观的组件重用。不同于其他框架,Mule可以让你不加修改地使用你现有的组件。这些组件不需要任何与Mule相关的代码,甚至编程接口(API)也不需要,就可以在Mule上运行。这样,业务逻辑和消息逻辑完全分离开来。
l 消息可以是从SOAP到二进制图像文件的任意类型。在设计上,Mule不会强制你使用任何设计约束条件,比如XML消息或者WSDL服务契约。
l Mule部署成多种拓扑结构,甚至可以不以ESB的方式进行部署。因为Mule是轻量级和嵌入式的框架,所以它可以很好地应对那些需要适应各种变化,并且按需求来增加和裁减功能的应用。在这种要求高可靠和可扩展性的系统中,Mule可以有效地减少部署时间,提高生产率。
MuleSource提供了管理工具,可以让你管理你的部署(Mule HQ),监视流过系统的事务(Mule Satum),控制系统的基础组件(Mule Galaxy)。在Mule管理部分将详细地介绍这些工具。
下一部分是理解消息框架,提供了对消息框架和Mule怎样在应用间进行数据交换的详细介绍。
理解消息框架
将你的应用联网的好处是一个应用可以发送数据给另一个应用。然而,许多应用并不具备从另一个应用读取或处理数据的能力。Mule提供了在多个应用间可以读取、转换和发送数据的消息框架来解决这一问题。简单说来,一个消息就是一包数据,这包数据可以在应用间通过一个特定的通道(或者队列)进行处理和发送。
最简单的情况下,当你把你的各种应用连接到Mule时,Mule会从一个应用中读取数据,为了数据可以被目标应用读取,Mule将其按照要求进行转换,然后把它发送给目标。这样,Mule就可以让你集成所有类型的应用,甚至那些不是为了做这个集成而构建的应用。
Mule是基于ESB思想的消息框架。ESB的主要功能是扮演了在不同应用中传送数据的传输系统的角色让它们可以互相通信,不管这些应用是在内联网中还是跨越了互联网。因此,系统的核心是在应用之间进行消息路由的消息总线。
Mule与传统ESB的一个不同之处在于,Mule仅仅是按照需要进行数据。传统的ESB上,你需要为连接到总线的每一个应用创建一个适配器,并将该应用的数据转换成单一的通用消息格式。这些适配器的开发和处理每个消息活动需要花费大量的时间和精力。Mule消除了对单一消息格式的要求。信息会被发送到任意的通信通道,比如HTTP或JMS,它只在沿途进行必要的转换。因此,相对于传统ESB,Mule提高了性能,减少了研发时间。
Mule的架构和术语使用了Gregor Hohpe和Bobby Woolf的合著Enterprise Integration Patterns:Building, and Deploying Messaging Solutions一书中描述的规范。对所有从事企业消息解决方案的人,这本书非常值得一读。
下一节理解Mule架构,更加详细地描述了Mule架构。
理解Mule架构
这一节描述了Mule架构的不同部分,它们是怎样处理消息的以及它们的数据。为了便于说明,这里使用了一个例子,这个实例中有一家公司,这家公司需要为顾客的订单开具发货清单,根据那些发货清单处理一些流程,并且将其送到商品库来完成订单。
1. 关于SOA
内容略
2. 数据处理
当消息被从一个应用(比如发货清单的入口系统)发送后,Mule取出消息,将它发送到一个服务中,这个服务会使用具体的业务逻辑处理这条消息,比如检查用户和数据库的存货清单,然后将消息路由到正确的应用中,比如订单执行系统。Mule包含了许多独立的部分,来处理的路由消息。服务的关键部分是服务组件(service component)。服务组件会执行消息中的业务逻辑,比如读取发货清单,向其中添加用户数据库里的信息,并且将其转发到订单执行系统。
服务组件的一个重要特性是它不需要任何Mule相关的代码;它可以简单的是POJO、Spring Bean、Java Bean,也可以是包含了具体处理数据的业务逻辑的Web Service。Mule需要来管理这些服务组件,将其打包并发布为服务,并保证正确的消息进入的输出,这些都要借助于你为这些服务指定的配置文件来完成。
在你的应用中,有许多不同的服务来处理不同的业务逻辑,比如一个服务用于验证发货清单中的货品是否有库存,另一个则是使用订单历史记录来更新一个分离的用户数据库。所以你的被消息封装着的发货清单,需要在服务组件间流动,直到整个处理流程结束。
下一节,在服务组件间路由消息,描述了Mule是怎样路由消息的。
3. 在服务组件间路由消息
按照前面的规定,服务组件包含了处理消息中的数据的业务逻辑,但它并不包含怎样进行消息接收和发送的任何信息。为了保证服务组件接收到正确的消息,并且在处理后对它们进行合适的路由,你需要在配置Mule时,为组件指定入站路由(inbound router)和出站路由(outbound router)来封装服务。
入站路由指定了一个服务组件要处理哪些消息,它可以过滤进入的消息,聚合消息,以及在将消息发送到服务组件前对它们进行重新排序。例如,如果一个服务服务订阅了一个RSS,入站路由就必须要知道来自那个提供者的消息。
服务组件处理完消息后,出站路由指定向哪里发送这条消息。你可以定义多个入站和出站路由约束,甚至将多个路由链接起来处理消息,来保证服务组件准确地按照要求来接收和发送消息。
下一节从业务逻辑中分离消息,介绍了怎样将服务组件是怎样与消息层进行分离的。
4. 从业务逻辑中分离出消息
Mule从多优势之一是它可以处理通过多种协议发送的消息。例如,一个发货清单可能总是XML格式的,但它也可能在一种情况下通过HTTP协议送达,另一种情况却又通过JMS消息,这依赖于生成清单的服务。如果一个服务组件仅仅处理业务逻辑,与数据协同进行工作,那它怎样读懂消息发送来的各种各样的格式的呢?
答案是服务组件不知道怎样读懂这些消息,因为默认情况下,服务组件被完全与消息格式隔离了开来。首先只由一类与协议相关的传输组件沿途运送消息,然后在路由器将消息发送到服务组件之前,转换器会将消息的有效负载(例如发货清单)按照需要转换成服务组件可以读懂的格式生。例如,如果一个XML发货清单通过HTTP协议发送,这条消息沿途将由HTTP传输组件运送,路由器引导这条消息到要对其进行处理的服务组件上,转换器就会根据服务组件的需要沿途转换发货清单,比如将其由XML转换为Java对象。所有的对消息的传输,转换以及路由对服务组件来都是完全透明的。
转换器是交换数据的关键,因为它们保证了Mule可以将数据转换成另一个组件或应用可以理解的格式。更重要的是,数据仅在需要的时候才会转换。不同于将所有的消息转换成单一的通用消息格式,消息和它的数据仅在它们正在被发往的目标组件需要时,才会被转换。最后一点,你可以使用多种传输组件来处理不同的通道,比如发送了一条基于HTTP协议的消息,然后在它被客户数据服务组件处理后,使用JMS消息将其转发。
将业务逻辑与发送和转换消息进行解耦,给应用带来了巨大的灵活性,这主要反映在两方面,你可以创建自己需要的架构,并且使你不必关心消息到达的多种格式,而更加简单地定制自己的业务逻辑。必要情况下,我们的服务组件可以直接处理消息的原始数据,当然这不是必需的。
下一部分,将所有绑定在一起,描述了Mule怎样将所有的组件连接起来,并协调它们之间的流的。
5. 将所有组件绑定在一起
端点(endpoint)是连接起所有服务的关键,它是一个配置元素。你可以在入站路由和出站路由中指定端点,来告诉Mule使用哪个传输组件,将消息发送到哪里,以及哪一个消息组件应该接收它。端点的主要部分是地址(address),它是使用统一资源标识符(URI)描述的,它指定了需要使用的传输组件,传输组件资源的定位和一些附加的参数。
举个例子,如果一个服务的入站路由指定了端点为http://myfirm.com/mule,HTTP传输组件就会把所有需要发送到这个URL的消息发送到这一服务。如果指定的是file://myserver/files/,那么文件传输组件就会监视这一目录,把所有这一目录中的新建文件发送到这一服务。在出站路由中指定端点指示了消息下一步去哪里——消息被发住的服务的入站路由需要与前一服务组件的出站路由相同,如下图所示。
一个服务可以使用不同的传输组件接收消息。你需要为一个服务要使用的每一种传输组件指定一个或多个的独立的端点。比如,如果你想让你的服务可以同时处理来自HTTP和JMS通道的消息,你应当需要在服务的入站路由里至少指定一个HTTP端点和至少一个JMS端点。Mule把这些端点登记在服务上,传输组件在运行期使用这些登记信息来配置自己,达到确定发送和接收消息的目的。
总的来说,Mule提供了简单、轻量级的方式来编写服务组件。这些服务组件可以处理数据,但它们不需要担心数据的发送和接收,消息的格式或者消息发送/接收使用的技术。尽管许多代理和集成技术提供了接入不同数据源的功能,但他们往往需要额外的代码来按照你想要的方式来获取消息,按照你指定的目的发送数据。Mule可以让你快速地开发服务组件,你可以使用简单的XML配置文件来修改它们的工作,而不需要写代码。
下一部分,理解逻辑数据流,讲述了一个详细的例子,来展示流过Mule各个部分的消息流。
理解逻辑数据流
前面的部分从概念的角度介绍了Mule的每个部分,现在,再使用发货清单的例子,来看一下数据流是怎样穿越Mule的各个部分的。完成这一过程的自始至终,Mule都是使用配置文件来确定要使用哪个服务组件、传输组件、路由器和转换器的。下面的图画出了这几步传输过程。
1. 用户在公司网站上发了一份订单,这一过程中,生成了一个XML格式的发货清单,并提交到了http://myfirm.com/orders。
2. HTTP传输组件接收到消息,用户数据服务入站端点被在http://myfirm.com/orders点工作,他在入站路由指定,消息必须包含一个Java对象,所以HTTP传输组件准备进行消息转换,并把消息转发到服务。
3. XML2Object转换器将XML发货清单转换成Java对象。
4. 传输组件将消息报发送到用户数据服务组件。
5. 用户数据服务组件查询主要的数据库,抽取与用户有关的附加数据,并将这些数据更新到发货清单中。
6. HTTP传输组件使用出站路由配置,确定了它现在必须将消息转发到http://myfirm/com/verify。
7. HTTP传输组件使用发货清单检查服务组件的入站路由配置接收消息,并将其转换到服务组件。
8. 服务组件使用仓库里的ID号更新了发货清单。仓库存有发货清单的所有有货的项目的信息。
9. 出站端点指定了一个JMS地址,所以JMS传输组件要将消息转送到定单执行应用中,该应用将使用JMS地址来取得订单。
现在你已经理解了Mule是怎样工作的,阅读下面的一节,将Mule集成到你的环境,你将学习到Mule所支持的部署选项和拓扑。
将Mule集成到你的环境
Mule是基于ESB架构思想的。ESB的消息骨架通常使用JMS实现,但是其他的消息服务器产品也可以使用,例如MSMQ、IBM WebSphere MQ(以前的版本叫MQSeries),或TIBCO Rendezous。另外,使用Mule时,并没有对你的集成工作层的工作方式的严格限定,你可以连接到EJB,大型应用,消息,Web Service,socket,甚至文件系统,与他们都可以进行简单一致的交互。
Mule还支持ESB以外的其他拓扑结构,包括管道方式、对等网、C/S、Hub-and-Spoke等等。这些拓扑可以混合使用,并且配合连接到一个企业服务网络(enterprise service network)中,完成复杂企业消息和服务需求的模型组建,如下图所示。
与Mule集成时,你可以以比较少的应用开始,而后慢慢连接更多的应用上去。例如,一个Mule使用者开始集成了六个系统,三年后,他们把多达71个的系统使用Mule连接了起来。Mule允许你开始时,根据需求从简定制,而后进行方便地持续扩展。
你可以在你的网络上部署多个Mule实例,如下图所示。这种方式对故障转移和负载均衡都非常有用,如果一个Mule实例由于服务器停止失效了,其他的Mule实现可以处理它的消息。你可以向一个实例发送一部分消息,而向另一个实例发送另一部分来均衡负载。
你可以多种方式部署每个Mule实例,单点方式,嵌入Web容器(比如tomcat),或者在应用程序服务器上。你可以使用私有的J2EE应用程序服务器,例如BEA WebLogic,IBM WebSphere,Oracle Application Server或者SunOne,也可以使用像Geronimo或JBoss这样的开源产品。
设计系统是一个艺术和科学并重的事情。系统必须正确的实现,并保证可扩展性。MuleSource专业的服务可以帮助你巩固你的架构,设计服务组件,或者所有的实现。联系MuleSource服务代理获取更多信息。
小结
Mule提供了可以使应用之间进行数据交换的消息框架。应用功能被包装成服务,这样的服务包含一个服务组件(用于处理数据的业务逻辑),路由器(使用端点来指定向哪里发送消息)和一些配置项。传输组件使用不同的通道在服务间传输消息,转换器沿途根据需要进行数据转换。
Mule不是现有的应用框架的替代产品。相反,Mule对一些开源的项目产生了影响,比如Apache CXF,Spring和ActiveMQ,填补了Java企业开发中对多平台中的多系统复杂交互这一需求的空白。Mule提供了以少量的工作就能完成将系统集成到一个强壮的,解耦合的环境中的方式,你甚至不用写代码,就能提供必需的系统间路由,传输以及转换消息的支持。
概述部分的主题是对Mule架构做一个介绍。现在阅读Getting Started部分可以获取如何下载、安装和开始使用Mule的信息。想知道根据你的角色你应当完成什么样的工作,赶快去阅读Quick Start吧。
<!--EndFragment-->
分享到:
相关推荐
### Mule 2.x Getting Started Guide 知识点解析 #### 一、Mule是什么? Mule 是一款基于 Java 的轻量级消息框架,旨在帮助开发者快速、便捷地连接各种应用程序,实现它们之间的数据交换。它支持多种技术栈,如 ...
- **从Mule 1.x迁移到2.0**:Mule 2.0相比1.x版本进行了大量改进和增强,如果正在使用旧版本,需要参考迁移指南进行平滑升级。 ### 示例详解 - **Running the Examples**:大多数示例都可以通过简单的命令行操作来...
根据提供的文档信息,“mule-1.4.4-getting-started.pdf”是关于Mule ESB(Enterprise Service Bus)1.4.4版本的入门指南。这份文档由tcarlson于2008年4月16日创建,并在同一天进行了最后的修改。以下是从文档的标题...
### Mule 2.0 Getting Started Guide:ESB与J2EE环境下的集成服务 #### 概述 Mule 2.0是一个重要的版本更新,它不仅为开发人员提供了更加强大、灵活的服务总线(ESB)配置能力,还通过引入Spring框架进一步提升了...
Mule支持多种传输方式,这些传输方式构成了Mule ESB的核心功能之一。例如: - **BPM Transport**:支持业务流程管理(Business Process Management),使得用户可以轻松地集成和管理复杂的业务流程。 - **CXF ...
根据提供的文档信息,本文将对"Mule 2.0用户指南"进行深入解析,并提炼出与标题、描述及...对于已经熟悉Mule 1.x版本的用户来说,迁移到Mule 2.0相对简单,但仍然需要仔细阅读官方文档以充分利用新版本带来的所有优势。
"list_map_to_pojo_2.grf", "list_map_to_pojo.grf", 和 "list_map_to_pojo_1.grf" 文件是Mule的图形化流程定义。它们描述了数据从Map到Java POJO(Plain Old Java Object)的转换过程。这些转换在Web服务的输入和...
Mule讲解.docxMule讲解.docx
Mule是一个基于服务容器和消息端点配置的系统,它提供了一种灵活的集成方式,允许开发者构建和管理复杂的服务网络。尽管Mule并不依赖Java Business Integration (JBI)标准,但它通过JBI绑定支持与JBI容器(如...
1. **服务代理**:Mule ESB可以作为服务的代理,接收请求,处理并转发到相应的服务,同时可以进行数据格式转换、安全控制等操作。 2. **消息路由**:根据预定义的规则,Mule ESB可以决定消息如何在系统间流动,例如...
#### 第一章:Mule 基础 **企业服务总线 (The Enterprise Service Bus)** 本章节首先介绍了Mule ESB(Enterprise Service Bus,企业服务总线)的概念,它是如何作为连接不同应用程序和服务的核心组件而存在。Mule ...
Chapter 1. Discovering Mule Chapter 2. Processing messages with Mule Chapter 3. Working with connectors Chapter 4. Transforming data with Mule Chapter 5. Routing data with Mule Chapter 6. Working with...
Mule ESB(企业服务总线)是一款强大的集成平台,由Mulesoft公司开发,用于构建和管理企业级的应用程序网络。"mule-standalone-3.9.0.zip"是一个包含Mule ESB独立运行时环境的压缩包,版本为3.9.0。在本文中,我们将...
弹性APM Mule3代理介绍此插件允许使用Elastic APM监视Mule 3.x组件的应用程序性能。 它提供了一种非侵入性的方式来度量和基准化Mule中的各个流程和步骤,并添加了对Mule组件的应用程序性能监控,以与日志,指标和...
接下来,书中通过实际案例展示了如何设置和配置Mule ESB环境,包括安装、搭建开发环境以及创建第一个Mule项目。 在深入讨论Mule ESB的核心功能时,书中涵盖了数据转换、路由、事件驱动架构、错误处理和监控等关键...
It starts with a quick overview of ESB technologyand a bit of Mule history-including the key changes between Mule 1.x andMule 2. Readers learn to configure Mule and then get straight to the goodstuff...
#### 1. Mule ESB介绍 Mule ESB是一种开源的企业服务总线(ESB),它允许不同系统之间进行通信,可以处理服务、消息和数据的集成。Mule3.0作为其中的一个版本,提供了广泛的功能和灵活性,支持多种协议和数据格式。 ...
包含http、cxf、vm、sap、activeMq、ftp、file、poll、Smtp、attachment、melExpression、Java、template节点的使用示例等。