Mule讲解.docx
《Mule讲解.docx》由会员分享,可在线阅读,更多相关《Mule讲解.docx(14页珍藏版)》请在冰豆网上搜索。
Mule讲解
Mulde学习讲解
目录
1Mule的基本概念-1-
1.1什么是Mule?
-1-
1.2Mule支持的企业技术有哪些?
-2-
1.3Mule引言-3-
2MuleESB的主要功能-4-
2.1服务的创建与管理-4-
2.2服务调解-5-
2.3消息路由-5-
2.4数据转换-5-
3MuleESB核心概念-5-
3.1服务组件ServiceComponent-6-
3.2服务端点EndPoint-6-
3.3消息路由Router-8-
3.4转换器transformer-8-
3.5传输器和连接器transportconnection-9-
4Mule工作原理-9-
4.1Mule流程图-9-
4.2Mule流程例子图-10-
4.3Mule数据流-11-
1Mule的基本概念
1.1什么是Mule?
Mule是基于Java开发平台,是一个轻量级的消息框架。
可以快速连接外部应用程序,比如说外部系统、内部组件,甚至说一段脚本,通过连接外部应用程序,达到我们轻松地交换数据。
说到Mule,我们不得不先了解ESB的概念,为什么这么说呢?
Mule的架构风格就是一个ESB的架构,ESB(EnterpriseServiceBus),企业服务总线的意思,我们可以对“企业服务总线”进行想象一下,结合下Mule的概念,我们很容易就可以联想到Mule既然是可以实现与外部系统应用进行连接和交换数据,那么企业服务总线也是基于该种功能而进行各种不同企业、不同技术、不同领域之间的数据交互而产生的。
既然Mule能使我们能够快速、简单地连接各个应用,并且还能在各个应用系统之间进行交换数据。
Mule使用了SOA的面向服务的架构(将系统进行功能化,每个功能提供一种服务。
现在非常流行WebService技术以及SOA(面向服务架构)技术)。
关于SOA我就不多介绍了。
我们项目中使用的也是面向服务的架构技术。
后期添加两张图进行说明吧。
一个是错乱不堪。
一个是荆条有序。
1.2Mule支持的企业技术有哪些?
在上一段中我说明了Mule是解决不同企业、不同技术、不同领域之间的数据交互。
也就是说不管应用程序采用了什么技术(协议),JMS、WebService、JDBC、HTTP甚至其他的技术,Mule都可以准确无误地将它们集成到一起。
以及通过协议如SOAP发送到WebService。
这就是它的强大之处。
你觉得呢?
如下图:
上图中列出了不同技术之间的在Mule的功能体系下能够连接并能够进行数据交互。
比如关于MuleFTP目录文件、HTTP网络协议、JMS的队列(Queue)、JDBC的数据服务、SMTP的Email服务、XMLWebService服务等,在这里我不得不引用一句话,那就是“Mule的组件可以是你想要的任意类型。
你可以轻松整合任何来自其他框架中某个组件的“简单的Java对象”(POJO)”。
1.3Mule引言
我们通过ESB(企业服务总线)流程图来说明Mule的应用。
图中我们可以看到右边显示了不同组件的应用程序系统(有EJB、JMS、WebService),他们所使用的部署服务器也不同,通过ESB将各个孤立的应用系统进行连接,并且能进行数据的交互。
ESB企业服务总线能够接收客户端发出的任意协议请求,通过ESB将各个应用系统进行连接,返回相应的响应信息给客户端。
可见,ESB是一个分布式的SOA架构。
2MuleESB的主要功能
MuleESB具有如下四个主要功能:
Ø服务的创建与管理(Servicecreationandhosting)
Ø服务调解(Servicemediation)
Ø消息路由(Messagerouting)
Ø数据转换(Datatransformation)
2.1服务的创建与管理
上图中用户需购买“家电”、“服装”、“零食”三种商品,他不用按分类一家店一家店地找,他只需通过一家超市就可以把他所需要的商品全部买到。
超市这样就把不同类别的商品全部集中到了一起,客户购物也方便。
MuleESB就是起到了这样的一种作用。
用MuleESB作为一个轻量级的服务容器来暴露和管理可重用的服务。
在这里举例并没有很明显地表现出“暴露”这一词,为什么呢?
这个得说说我们的程序了。
比如说,家电行业提供一个WebService接口方法发布至MuleESB处,客户端并非也通过家电行业提供的接口方法,可能超市MuleESB中间进行了处理与隐藏,超市重新提供一个新的接口暴露给用户访问,比如说进口商品价格和出售价格的改变。
2.2服务调解
隐藏服务消息的格式和协议,将业务逻辑从消息中独立出来,并可以实现本地独立的服务调用。
2.3消息路由
基于内容和规则的消息路由(来回)、消息过滤、消息合并和消息的重新排序。
消息路由控制组件如何接收消息,以及在处理后应该发送到何处去,入站路由控制服务如何处理入站消息(如,有选择地允许那些符合特定标准的消息),出站路由控制服务处理完消息后该将其发往何处(如,将其发送到接收者的列表,或将消息拆分,然后发送到不同的端点)。
2.4数据转换
✓在不同的格式和传输协议中进行转换数据,在应用间交换不同格式的信息;
✓操作消息的负载内容,包括加密、压缩和编码转换
✓在异构的传输协议的数据类型间格式化消息
3MuleESB核心概念
每一个Muleflow都包含一系列接收、传输和处理消息的构件。
在一个flow中,将若干独立的组件连接在一起来完成消息的接收、处理以及最终的路由。
Flow支持同步和异步的子flow,单向(one-way)以及请求-响应(request-response)交换模式。
也就组成了以下核心。
✓服务组件(ServiceComponent)
✓服务端点(Endpoint)
✓消息路由(Router)
✓转换器(transformer)
✓传输器和连接器(transportconnection)
下面我们就针对这些核心,进一步去了解。
3.1服务组件ServiceComponent
组件一般用来执行某个操作的处理,对传入消息数据进行处理并传出消息数据下一编排节点,常用的组件有:
ØEcho组件(显示组件):
将节点收到的数据简单的输出到控制台,并不对数据做任何处理直接再传递到下一节点。
简单地说,就是控制台输出请求的信息。
作用是显示输入的信息。
ØSOAP服务组件:
Mule使用CXF框架(Celtix+XFire这个框架得自己去了解了,这里不介绍)对外实现SOAP协议的WEBService服务。
ØLogger组件(日志组件):
基于Mule表达式决定什么活动信息需要记录日志。
根据日志级别不同,记录日志的详细程度有不同。
这里引出了Mule的表达式,何为表达式?
类似java函数、数据库函数、javascript函数等等。
ØJava服务组件:
执行一个指定JAVA类的方法函数。
例如:
Spring,可以通过配置方式控制Java服务。
学过Spring框架的都知道,Spring的核心是IOC。
简单的说,就是通过配置设置Value值。
ØRest服务组件(HTTP下的Rest):
REST是HTTP协议下定义资源、链接、URI的格式化架构。
Mule使用Jersey实现RESTful的Web服务(不了解),Jersey按照JAX-RS(JSR-311)规范进行实现。
JAX-RS通过在Java类中使用标注方式快速实现RESTful服务。
ØFlowReference(流引用组件):
该组件可编排任一节点后面,表示将上一节点的数据传入到另一个Flow流程。
3.2服务端点EndPoint
一般来说,端点用来发送和接收数据,负责连接外部资源并发送信息。
端点可以是输入端点也可以是输出端点。
输入端点通过关联的连接器接收信息,每个连接器负责输入节点的实现。
输出端点通过关联的连接器接收信息,每个连接器负责输出节点的实现。
MuleStudio支持如下几种端点:
ØAJAX:
在浏览器与Mule直接采用AJAX异步发送和接收信息。
ØFTP(文件传输协议):
两种情况,作为入口使用时将定时刷新指定的FTP目录下所有文件,每读取一个文件然后立即删除,同时将文件内容作为数据向下一节点传递。
作为出口使用时将输入数据生成文件并上传至指定FTP服务器,并继续向下一节点传递数据。
ØFile(文件端点):
从文件系统中读、写文件。
作为入口使用时将定时反复读取指定目录下所有文件,同时可根据配置将文件备份到指点目录中,每读取一个文件就将文件内容作为数据向下一节点传递。
作为出口端点使用时则将输入数据写入指点文件,并继续向下一节点传递数据。
ØGeneric:
通用端点是信息的字符串表现方式。
可以是FTP、HTTP、File
ØHTTP:
通过HTTP协议发送和接收信息。
HTTP端点作为入口时接收HTTP协议的请求,作为出口时则向指定服务器发送HTTP请求。
简单的说,就是我们以HTTP形式进行访问。
入口当然是接收,出口当然是发送。
ØQUARTZ:
一般作为入口端点用来定时触发任务。
比如说将配置的字符串作为payload向下一节点传递。
节点的控制,类似java中的continue,跳过当前执行,走下一步。
当然这里也不会是向下一节点执行完了就返回来继续执行。
ØJDBC:
是用来与数据库进行交互。
作为入口时,定时执行SQL语句,并返回数据。
作为出口时,什么语句都可以执行。
它使用spring管理数据源(IOC依赖注入)。
ØJMS:
向JMS服务器发送消息或者从JMS服务器获取消息。
,并遵循JMS规范。
ØSFTP:
从SFTP服务器读、写文件。
ØJetty(CXF框架使用的服务器,比Tomcat更优越,不得让人感慨:
“感觉是清末的王朝”):
开源的Jetty框架提供JSP和Servlet的运行容器,Jetty框架是一个非常优秀的嵌入式Servlet容器,可以替代Tomcat作为WEB应用程序的服务器来使用。
ØSMTP(Email):
只能作为出口端点使用,一般用来做异步邮件通知,默认将上一节点传来的数据作为邮件正文发送到指定邮箱。
ØVM:
内存队列,允许你在相同的Mule配置下集成不同的流程或者服务。
ØPOP3/POP3S:
只能作为入口端点使用。
作为入口默认每60秒检查指定邮箱是否有新邮件到达,如果有则下载邮件并将邮件正文作为数据向下一节点传递。
ØTCP/UDP:
作为入口端点使用时使用TCP或UDP协议创建套接字服务器侦听端口来接收客户端请求;作为出口端口使用时相当于客户端向外部服务器发送套接字请求。
3.3消息路由Router
消息路由用来控制流程信息的走向,用来根据上一节点的输出数据进行分支筛选。
消息路主要有如下几种:
ØAll多路分发器:
将前一节点的数据逐一发送所有分支流程都执行完才向下一节点传递。
类似java的for循环,循环完才继续执行。
ØChoice分支选择器:
根据前一节点的数据按照指定鉴别器和表达式进行流程选择,鉴别器和表达式的定义方式和拆分器相似。
类似java中Ifelse语句。
ØSplitter数据拆分器:
将前一节点的数据根据指定鉴别器和表达式,对数据进行截取并传递到下一节点。
还是直接看图吧,很简单。
这里就不细说了。
3.4转换器transformer
转换器主要用来对前后两节点输出输入数据类型不一致时,对消息数据类型进行转换。
标准转换器常用的有:
ØObject-to-Xml/Xml-to-Object(把Object对象类型和XML格式)
ØTransformerRef(转换器引用)
ØAppendString(追加String)
ØByte-Array-to-Object/Object-to-Byte-Array/Byte-Array-to-String/String-to-Byte-Array
ØByte-Array-to-serializable/Serializable-to-Byte-Array
ØObject-to-Json/Json-to-Object(Object对象类型和Json格式串)
ØCustomTransformer(自定义转换器)
⏹JsonToMap/MapToJson(Json数据串和Map格式的数据互相转换)
3.5传输器和连接器transportconnection
传输器可以用来以统一的方式实现消息通道并联通潜在数据源或消息通道。
传输器包括:
Øinbound-only仅入站:
组件只接收事件不能分发事件。
Øoutbound-only仅出站:
组件只能分发事件不能接收。
Øinbound-outbound出入:
组件可以接收也可以分发事件。
。
4Mule工作原理
4.1Mule流程图
ClientApplication(客户端应用)
第一层:
转换层,将客户端请求的协议转换成Mule端协议
第二层:
传输层,Mule将转化成的协议进行传输
第三层:
路由层,根据请求的协议进行流向处理,类似派发一样
第四层:
入口端点,常用的有HTTP、FTP等。
ServiceComponent(服务组件):
用来执行某个操作的处理。
4.2Mule流程例子图
这个图简单地说就是关于协议之间的变换,是对上一Mule流程图的一个更细致的举例说明。
应用系统1发起的是一个HTTP协议消息,Mule框架机制对应用系统1的HTTP协议进行转化后,变成mule可读协议后进行传输,通过路由器来控制流程信息的走向,然后进入服务组件来执行应用1操作的处理,对传入消息数据进行处理,并传出消息数据下一编排节点(简单来说,就是路由)。
后面的说明就是一个相反的说明。
我举个很简单的例子说明吧。
关键字:
全球化的世界,中国人在国外的货币支付手段来说,银联的发展。
4.3Mule数据流