Mule Esb 入门篇

来源:互联网 发布:d3.js圆形动态加载 编辑:程序博客网 时间:2024/04/30 22:27



一、我们为什么选择MULE ESB 

    Mule ESB 是最广泛使用的开源企业服务线,它有超过一百五十万下载及两千五百个产品部署。基于Mule ESB的简洁部署模式和轻型架构,开发人员可在几分钟内轻松地创建和集成应用服务。Mule ESB简化整合开发人员可轻松地在多种异构系统中构建高性能,多协议的整合服务。

    伴随着这些问题,Mule构建自底向上与现实世界集成的能力作为自己的首要目标。因此,Mule对JBI 容器提供了无缝支持,如果需要的话,允许 ServiceMix 组件和其他实现与Mule的简化的结构一起使用, 对JBI建模的开发者没有严格的要求。相反,Mule使用简单的,POJO(Plain Old Java Objects)和基于XML体系,在行业上拥有最短学习曲线之一的配置,多亏了它(Mule)与Java标准的相似。

   当他们(组织)将“一个快速解决当前问题同时为后续(集成)做好准备的集成方案”作为他们(组织)首要需求的时候,他们就会选择Mule。Mule所具有的稳固的标准兼容性,与格式无关的集成方法特性,拥有许多集成专家的活跃的开源社区和具有明确的前进方向,使得组织选择的集成平台,能展示出他们基础设施的全景。
   这里是一些Mule ESB实在好处:
  • 对开发者没有任何标准的局限
  • 简化了POJO类程序模式,更好的发辉开发者的现有技能而加快部署
  • 支持多种接入点,像是JMS, JDBC, 和SOAP
  • 容易使用 - 只用一个配置文档便可设置多种服务
  • 支持多种不同数据的转换
  • 整合平台模式:高度模块化,易于扩展的基本代码 - 基于行之有效的模式生成简明的解决方案来面对各种独特的挑战
  • 开源优势:众多的拥有实际经验的专家和开发人员无私的为Mule的基本代码做贡献
 

二、MULE ESB 是什么
   

   Mule是一个轻量级的消息框架也是分布式的对象中介,允许你快速、简单的连接各个应用来交换数据。以企业级服务总线这个企业集成模式开设计的Mule可以无缝的利用总多的技术像JMS、HTTP、Email、XML-RPC来处理应用之间的交互。 


    简单的说,Mule就是可以利用各种技术来对不同的应用之间进行连接,来达到应用之间交互的目的。Mule是很容易扩展的,最初的时候,你可能只有几个应 用通过Mule来进行连接,但是随着规模的不断变大,Mule管理的应用可以不断的增大。Mule对于应用或者组件之间的交互的管理是透明的,不管是否在 同一台机器上,不管通信的协议是否相同。 Mule是基于企业级服务总线(ESB)架构的思想。Mule是厂商中立的,所以不同厂商的产品都可以连接到Mule系统,你也可以自己进行相应的扩展。

    应用直接需要对于数据进行交换处理,但是应用之间的数据格式肯定是不可能一致的,那么就需要一个通道来进行数据格式的转换,我们把应用内部的数据结构叫做Date,把在通道中传输的数据叫做Message。 那应用之间的数据格式的转换以及传输这部分的工作都由Mule来完成,而应用只需要关心对业务逻辑的处理,至于数据的转换和传输都由Mule在底层完成。 当然Mule所能处理的要更复杂的多了,包括多通道的传输以及消息的过滤等等,这些还是在看Mule的Examples的时候好好的挖掘吧。

三、MULE ESB 的基本概念

   最简单的说来,Mule应用通过若干像乐高积木一样的消息处理器来处理消息,这些处理器组合在一起就是一个我们称之为flow的过程。理解基本的消息结构以及flow体系是理解Mule的关键所在。本质上来讲,每一个Mule flow都包含一系列接收、传输和处理消息的构件(building block)。

        本文将首先介绍Mule的flow概念,然后分解流经flow的Mule消息组件。

Mule Flow

        在一个flow中,你将若干独立的组件连接在一起来完成消息的接收、处理以及最终的路由。Flow支持同步和异步的子flow,单向以及请求-响应交换模式,以及其它符合体系结构的选项。你可以将很多flow连接在一起来创建一个完整的应用,部署在(on premise?)Mule或其它应用服务器,或者云端。

使用Flow开发

        你可以通过两种方法构建一个Muleflow:

  • 直接向一个基于XML的应用配置文件中敲入几行代码
  • 使用Mule Studio的图形接口将组件图标整理为可视化的序列

        接下来,你使用Studio附加的图形工具来配置这些有序的构件,当然你也可以直接编辑配置文件中的XML代码来进行配置,或者两者结合着使用。

Flow的剖析

        最简单地说,flow是消息处理事件的序列。进入flow中的一条消息可能会流经各种各样的处理器。下面的示图中,Mule通过一个请求-响应入站端点(request-response inbound endpoint)来接收消息,将内容转换成一种新的格式,并在通过消息源返回响应之前,进行业务逻辑处理。


        这些构成了flow的基本单元通常被称为构件(在Mule Studio中)或者元素(在单击或Studio的XML配置中)。总的来说,一个构件在Mule Studio中对应一个icon图标——图标则表示一个消息源、处理器或者组件。构件是Mule应用配置文件中一个XML元素的可视化表现形式。

        下图所示分别为Mule Studio可视化编辑器中的一个简单的flow及其对应的XML代码。


[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.    
  3. <mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.0"  ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd  
  4.    
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd  
  6.    
  7. http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd  
  8.    
  9. http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">  
  10. ...  
  11. </mule>  
  12. <flow name="Simple_Example_Flow1" doc:name="Simple_Example_Flow1">  
  13.     <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP" path="kittens"/>  
  14.     <set-payload value="Kittens? Kittens!" doc:name="Set Payload"/>  
  15.     <echo-component doc:name="Echo"/>  
  16. </flow>  

        Mule处理由外部资源(如事件)初始化的消息。例如,一条消息可以由用户从移动设备出发的一次请求初始化,或者由诸如数据库中的一次数据变更、SaaS应用中一个新的用户ID的创建等事件初始化。

        大多数flow中的第一个构件是一个接收器,负责接收新消息并将其放入处理队列。Mule使用一个消息源元素——上例中的入站HTTP端点(inboundHTTP endpoint)——从一个或多个外部源头接收消息,于是触发了一个flow的执行。一个运输机(transport)携带消息在集成与应用层流转使其得到处理。

        Mule转换器(transformer)是节点间数据交换的关键,它们允许Mule将消息负载数据(payloaddata)转换为其它应用可以理解的格式。Mule还能够进行消息内容的强化,允许你在处理过程中接收额外的数据附加到消息中。

        Mule使用组件(component)来针对特定的业务逻辑(如检查客户与清单数据库)进行末端处理。所以,组件将消息路由给正确的应用(例如一个订单执行系统)。Mule使用一种被称为阶段性事件驱动架构(Staged Event-Driven Architecture,SEDA)的架构进行flow中的异步消息处理这一核心功能。值得一提的是,组件不需要使用任何特定的与Mule相关的代码;它们可以是简单的POJO、Spring的bean,Java bean,Groovy脚本或者包含了处理数据的业务逻辑web service。组件甚至可以是其它语言开发的,例如Python、JavaScript、Ruby和PHP。Mule构件的种类包括了当前最常用的企业集成模式。

        Flow还可以包含过滤器、作用域、flow控制、错误处理策略,以及诸多种类的云连接器。更多关于这些种类的flow构件,以及关于它们如何能够被连接起来,为你的应用提供你需要的确切功能的细节,请参阅Mule应用架构 。

        当你配置那些连接到一起组成了你的flow的单独的元素时,你可以使用Mule表达式语言来提取关于消息或者其环境的信息,并且指导Mule基于这些信息做出处理决策。更多关于Mule表达式语言以及在Mule中如何使用表达式的信息,请参阅Mule表达式介绍。

        更详细的关于消息如何在flow中流转的细节,请参阅理解Mule体系。

Mule消息 

        Mule消息是通过一个或多个flow流经你的应用的数据。它包含两个重要部分:

  • 消息头,包含消息的元数据。
  • 消息负载( payload),由你的业务特定的数据组成。

        一些Mule消息可能包含第三部分:一个附件。不过,由于附件并不常用,我们在这里将不再赘述。

消息头

        Mule消息头包含关于这条消息的元数据。元数据包括属性和变量,提供了关于这条消息的有用信息,帮助其到达目的地。属性和变量使用统一的格式:每一个属性和变量都具有一个name和一个value。name用于在Mule中引用这个属性或变量,value是其中存储的信息。所以,name就像是一扇门的钥匙,value就是门后面的任何东西。

        一条消息的头部包含的属性和变量具有特定的域,定义并组织它们如何在消息的整个生命周期中起作用。

        属性具有两个主要的域:入站和出站。

  • 入站属性(inbound properties)由消息源自动生成,用户不能设置或者操纵这些属性。
  • 出站属性(outbound properties)可以由用户配置。出站属性是在一个flow的过程中被设置的,并且当消息通过运输机从一个flow的出站端点传递到另个一flow的进站端点的时候,出站属性可以变为入站属性。(注意,如果这条消息是通过flow-ref而不是运输机传递到另一个flow,出站属性仍然是出站属性,而不会被转换为入站属性。)

        消息携带的属性信息依据作用域来发送元数据,以便于处理以及避免消息穿过运输机边界时发生错误——无论是进入一个新的flow,或者是被传输到另一个应用。入站属性持有消息源特定的元数据,以防数据格式混乱或者之后消息生命周期发生其它处理事故。出站属性持有类似的元数据,不过该元数据在消息进入flow的时候才有效。出站属性可以被Mule自动设置,也可以通过开发者在flow中插入一个或多个转换器来手动设置。

        变量是用户定义的关于消息的元数据。变量具有两个作用于:

  • Flow变量只在当前flow存在。
  • Session变量在同一应用的所有flow中都有效。

        变量是关于消息的临时信息片段,意在用于对它进行处理的应用,而不是随消息一起被发送到目的地。所以,变量更有可能被人触发,反之属性更有可能被系统设置和触发。然而,并没有关于如何使用属性和变量的严格规定。简言之,有了这些分别被划分到各自作用域的属性和变量,Mule支持4种共享相同的键/值对结构的元数据。这四种类型有基于它们作用域的不同的应用。

        你可以使用Mule表达式语言( Mule Expression Language,MEL)来设置、触发和操纵出站属性,flow变量以及session变量。

消息负载

        消息负载是Mule消息最重要的部分,因为它是你通过Mule应用发送的数据的内容。你可以在消息头使用元数据来传达关于你的消息的信息,或者保护其免受干扰,但是消息的核心——你要传输的数据——是消息最初存在的原因。

        然而,负载在流经flow的时候,没有必要保持不变。Muleflow中各种各样的消息处理器都可以在沿途影响负载,设置、丰富它的值,或者将其转换为新的格式。你也可以在flow中使用MEL从负载中提取信息。



四、MULE ESB 开发环境搭建


(1)、部署mule到本机

A、Mule下载

      从Mule的官方网站(http://www.mulesoft.org/display/COMMUNITY/Home)上下在社区版。目前的最新版本是3.0,下载下来的文件是mule-standalone-{version}.zip

B、安装

  1. 解压下载下来的zip文件。如图中所示    

 

 

  2. 将解压出来的mule文件夹拷贝到想要的地方,比如放在d:/soft目录下,然后将其重命名为mule

  

   3. 鼠标右击我的电脑 —>属性—>高级—>环境变量—>系统变量。在系统变量新建MULE_HOME变量,值为Mule的路径。

   

  4. 将MULE_HOME变量添加到Path路径

  

 至此,Mule安装配置完成。

C、Mule服务启动

    点击开始菜单—>运行—>输入cmd—>进入控制台—>输入mule,出现启动信息。表明配置成功。

 


在这里注意 java的环境变量配置要修改一下,实际开发的时候应用的的是mule 3.3.0


(2)、安装开发工具Mule Studio 


第1步 - 下载和安装Mule Studio 
从www.mulesoft.org下载Mule ESB Community Edition的发布包. 无需安装, 解压至本地硬盘即可使用。 

第2步 - 启动Mule Studio 
在解压目录下执行muleStudio.exe以启动Mule Studio, 并在Select a workspace界面中输入或选择一个workspace路径。


第3步 - First Steps 
如果启动的是一个新的workspace, Mule Studio会显示First Steps界面, 选择Go to Mule Studio开始使用Mule Studio。




五、Mule  ESB-在架构中的常用模式应用


根据实际使用过程中的常见场景,我们总结出MuleESB在项目中的四种常用模式:

1、简单服务模式


简单服务模式用于简化同步服务调用的配置,对应消息传递方式中的请求-响应方式。

2、桥接模式


桥接模式用于在inbound endpoint和outbound endpoint之间建立直接连接,不需要component提供业务逻辑

3、校验器模式


校验器模式通过定义一个校验过滤器过滤服务请求,并同步返回ACK(ACKnowledge)或NACK(Not Acknowledge)结果。通过校验的服务请求被异步分发给处理方。

4、服务代理模式


    Web服务代理模式用于将Web Service请求直接转发至远程目标Web Service服务端,Mule本身不提供实际的Web Service。


    简单的服务,可以通过Mule的流程配置文件通过拖拖拽拽完成。牵扯的复杂的逻辑,我们还是需要手工写一些类做辅助工作。


    Mule支持多种编程模型,常用的有Web Service,Web Service Proxy,以及基于JMS的消息发布订阅等。

MuleESB提供了一个消息框架,用于程序之间的数据交换。应用被封装成为服务,服务包含服务组件、消息路由和其它一些配置。Transport使得服务间的数据在不同渠道内得以传送,并且transport在对数据的传输过程中,对需要格式转换的数据进行数据转换。

MuleESB 不是取代现有程序架构,相反,MuleESB利用如Apache CXFSpring等开源项目,对自己的项目进行了功能加强。 MuleESB 得以较好的解决各个系统、各种平台、各种复杂情况的整合。








0 0
原创粉丝点击