MULE ESB 节点详解


有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. MULE ESB 应用说明 尹亮 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture.  一个MULE应用由一个编排XML文件和相关JAR包组成,部署 在MULE服务器(mule-standalone-3.1.2)的apps目录,可以 把MULE应用以ZIP文件的形式直接放在apps目录(MULE 服务器启动时会自动解压)或按目录部署,一个目录为一 个MULE应用,一个典型的MULE应用目录结构如下: mule服务器目录 -- apps -- Sample lib mule-config.xml  lib目录存放本应用使用到的所有JAR包,如果多个mule应用共用的JAR包, 例如第三方开源JAR包,可以放入mule应用服务器的lib\boot目录共享使用  mule-config.xml为缺省的mule服务编排配置文件(必须这个名字)。当有多个 编排XML文件时,应增加一mule-deploy.properties文件,在文件中指定编排 XML文件名 MULE应用的部署 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. MULE ESB的编排原则  MULE ESB服务编排以流(FLOW)为单位进行编排,每个流一 般都由以下几个常用节点元素组成  入口端点(inbound-endpoint)  组件(component)  消息转换器(transformer)  流控制器(flow control)  其他节点元素  出口端点 (outbound-endpoint)  范围容器 (scope)  过滤器 (filter)  全局公共节点(Global Element:端点连接器、消息转换器、云连接器、过滤器)  云端连接器 (Cloud Connector)  MULE编排的基本原则  流编排中的每个节点的输入是上一节点的输出,每个节点的输出是下一节点的输入,这个 传输数据在MULE中被称之为payload,封装在一个MuleMessage的对象中进行传输  当上一节点的输出和下一节点的输入类型不一致时,在两个节点之间编排消息转换器  当需要依据上一节点的输出payload进行分支编排时,编排流分支选择控制器  更多MULE编排的可视化使用方法见《Mule Studio用户手册》 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. ESB应用的一些常量表达式  在ESB的配置中有一些常量表达式可以用在各种命名中 属性 说明 #[function:datestamp] 当前日期时间,例如:31-12-11_23-59-59.391 #[function:datestamp:yy-MM-dd] 当前系统日期,例如:11-12-31 #[function:systime] 当前系统时间,LONG型:12812391293 #[function:uuid] 唯一GUID,#[function:]还支持一些函数now, date, hostname, ip, count.等 #[header:] 传入MuleMessage中的属性值,例如:#[header:host] ${app.home} 本ESB 应用的app主目录 ${mule.base} MULE应用服务器目录  还可以通过导入.properties属性配置文件,再通过${属性名} 来引用常量,导入属性配置文件的方法是在编排XML中加入  更多常量表达式的使用方法参见官方文档: http://www.mulesoft.org/documentation/display/MULE3USER/Expressions+Configuration+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. 常用的端点(endpoint)  端点连接器的作用是在不同的网络通讯协议之间进行转换访问一般来说, 端点用来发送和接收数据,负责连接外部资源并发送信息,端点可以是输 入端点也可以是输出端点。一个MULE应用一般至少有一个端点连接器作 为入口来响应来自于网络的请求,当端点作为出口端点使用时可理解为作 为客户端向外发送请求。常用的几种连接器如下:  HTTP  Quartz  FTP  File  POP3 / SMTP  Generic  VM  Jetty  TCP/UDP  STDIO  JDBC  JMS  更多端点连接器参见 http://www.mulesoft.org/documentation/display/MULE3USER/Transports+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. 全局端点连接器(Connector)  在了解各种端点前先了解下全局端点连接器(Global Element Connector)的 作用,全局端点连接器的作用是定义ESB应用中所有同类型端点能够共用 的一些属性,这些属性对本ESB应用中的对应的所有端点都起作用。如果 同一个类型的全局端点连接器定义了多个,那么在各入口端点和出口端点 中必须使用connector-ref来指点引用哪个全局端点连接器。  全局端点连接器和端点一样也分为不同的种类,每种端点都有一个全局连 接器定义一些扩展属性。 例如HTTP端点的全局连接器可以定义代理网关等属性  全局端点连接器不是必须的,但可以为端点提供一些扩展属性的设置 每个端点对应的全局连接器更多属性设置可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Transports+Reference  各种端点的XML标签定义规则  端点描述定义:<协议名:endpoint name="XXX" 属性1="" 属性N= ""/>  入口端点定义:<协议名:inbound-endpoint 属性1="" 属性N="" />  出口端点定义:<协议名:outbound-endpoint 属性1="" 属性N="" />  全局连接器: <协议名:connector name="XXX" 属性1="" 属性N= ""/> 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. HTTP端点  HTTP端点作为入口时接收HTTP协议的请求,作为出口时则 向指定服务器发送HTTP请求,常用属性有 属性 必须? 缺省值 说明 doc:name no 所有节点共有的属性,mule Studio可视化编 排工具的显示名称 doc:description no 所有节点共有的属性,mule Studio可视化编 排工具的显示描述 host yes DNS名称或IP地址 port yes 8081 连接端口 user no 如果 HTTP 访问需要授权,这里设置验证的 用户名 password no 如果 HTTP 访问需要授权,这里设置验证的 密码 path no HTTP URL的相对路径 contentType no text/plain 设置 HTTP 访问的 ContentType 参数 keep-alive no false 设置 Socket 连接是否保持激活状态 (true/false) method no GET 设置 HTTP 访问的方法 (GET/POST/DELETE等) 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. HTTP端点 - 2  常用属性(续),以下属性在各类端点中都具有共性 属性 必须? 缺省值 说明 exchange-pattern no one-way 请求应答模式,(大多数端点都共有该属性) request-response同步模式,需要等待应答 one-way 异步模式,单向无应答 responseTimeout no 10000 端点需要应答时,等待应答超时时间(ms) (具有应答模式的端点共有属性) address no 通用URI路径,不能和host、port、path同时使用 (http://user:pwd@host:port/path) (各种端点都共有该属性,URI格式按端点分) disableTransportTransf ormer no 禁止端点使用端点信息转换器 connector-ref no 端点引用同类型全局连接器名字,如果存在多个同类型全 局连接器,端点必须指定一个连接器 transformer-refs no 端点接收消息后被执行的转换器列表,空格分隔 (各端点共有的属性) responseTransformer- refs no 应答消息到来后被执行的转换器列表,空格分隔 (具有应答模式的各类端点共有的属性) encoding no 数据在各端点内转换的编码格式.(共有属性) 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. HTTP端点 - 3  XML编排实例 or  可用于HTTP消息转换的几种转换器  更多属性可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/HTTP+Transport+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Quartz定时端点  Quartz端点一般作为入口端点用来定时触发任务,常用属性有 属性 必须? 缺省值 说明 jobName yes 定时器名字 cronExpression yes 采用Quartz的cron表达式设置任务触发时间,不可 和repeatInterval等三个参数同时使用 QuartzCron表达式生成器 startDelay no 定时器任务延时启动时间(ms) repeatCount no 定时器任务触发1次后,再重复触发的次数,实际 执行次数是N+1 repeatInterval no 定时器任务重复触发的时间间隔(ms)  必须的JOB子节点(5个子节点任选其一) 子节点 描述 最常用的通用事件JOB,支持字符串、文件数据作为任务 事件的输出数据 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture.  具体任务组件不需要传递任何数据的配置方法  将配置的字符串作为payload向下一节点传递 foo  将文件内容作为payload向下一节点传递  通常在Quartz定时器端点后编排一个组件方法用来执行具体的定时任务  更多属性可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Quartz+Transport+Reference Quartz定时端点 - 2 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. FTP端点  FTP端点作为入口使用时将定时刷新指定的FTP目录下所有文 件,每读取一个文件然后立即删除,同时将文件内容作为数据 向下一节点传递。作为出口使用时将输入数据生成文件并上传 至指定FTP服务器,并继续向下一节点传递数据,常用属性有 属性 必须? 缺省值 说明 host yes DNS名称或IP地址 port yes FTP连接端口,一般是21 user no 登录FTP服务器的用户名 password no 登录FTP服务器的密码 path no 指定的FTP服务器目录 binary no true 是否使用二进制FTP传输模式 passive no true 是否使用被动模式 address no 通用FTP路径,不能和host、port、path同时 使用(ftp://user:pwd@host:port/path) pollingFrequency no 1000 刷新目录中文件的时间间隔(ms) 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. FTP端点 - 2  常用属性(续): 属性 必须? 缺省值 说明 responseTimeout no 10000 超时时间,单位毫秒,缺省为10秒 encoding no 以什么编码格式读取文件内容,GBK/UTF-8/... connector-ref no 引用全局FTP连接器的配置 outputPattern no 作为出口端点使用时的输出文件名,可以是 一些命名表达式: #[function:datestamp]:当前日期时间 #[function:datestamp-yy-MM-dd]:当前日期 #[function:systime]:LONG型系统时间 #[function:uuid]:全局GUID #[header:originalFilename]:原始文件名 #[function:count]:上传计数 #[header:]:消息属性 FTP端点的输出数据是byte[]类型(适用小文件),可通过定义全局FTP连接器并将全 局FTP连接器的streaming属性设为true(大文件适用),则FTP端点的输出数据类型 将改为InputStream,这时需要在用户处理方法中显式的关闭Stream流,否则文件 流未关闭将不能删除文件。小文件推荐使用byte[]方式,由MULE自动关闭文件流 更多参考:http://www.mulesoft.org/documentation/display/MULE3USER/FTP+Transport+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. FILE端点  FILE端点作为入口使用时将定时反复读取指定目录下所有文 件,同时可根据配置将文件备份到指点目录中,每读取一个文 件就将文件内容作为数据向下一节点传递。作为出口端点使用 时则将输入数据写入指点文件,并继续向下一节点传递数据。 属性 必须? 缺省值 说明 path yes 指定的读取/输出文件目录 moveToPattern no 指定的备份文件名规则,可以使用同前面FTP相同的 命名规则。在向下传递数据前先进行备份备份 moveToDirectory no 指定的备份文件路径,指定备份文件存在则不备份 pollingFrequency no 1000 重复读取目录中文件的时间间隔(ms) fileAge no 500 等待文件处理完的最小时间(ms),达到时间后MULE将 关闭文件读取流 comparator no 指定输入文件名排序的比较器的JAVA类名,该类必 须须实现 java.util.Comparator 接口 reverseOrder no false 是否按照比较器的结果进行倒排序 encoding no 以什么编码格式读取文件内容,GBK/UTF-8/... address no file://,也可用来指定网络路径等 outputPattern no 作为出口端点使用时的输出文件名规则 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. FILE端点 - 2  FILE端点还有一些扩展的属性可通过定义全局连接器来定义 属性 必须? 缺省值 说明 writeToDirectory no 指定唯一输出文件目录,当设定该值是,端点的 path属性无效 readFromDirectory no 指定唯一输入文件目录,当设定该值是,端点的 path属性无效 autoDelete no true 读取文件后是否自动删除来源文件 outputAppend no false 当输出端点的指定输出文件存在时是否采用 追加方式写入,默认是覆盖模式 streaming no true MULE传递的消息数据是否采用 FileInputStream类型,false传输数据为byte[] recursive no false 是否递归读取子目录中的文件 serialiseObjects no false 是否将输出的对象数据序列化到文件,默认 按字节或文本写如家 其他属性如moveToPattern、moveToDirectory、pollingFrequency、fileAge、 comparator、reverseOrder、outputPattern等和端点的定义一样,设置多个端点的 共性,更多使用方法参考官方文档: http://www.mulesoft.org/documentation/display/MULE3USER/File+Transport+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Generic通用端点  Generic通用端点即可作为输入端点,也可作为输出端点, 通过URI格式来描述端点,通用的URI格式是: 协议名:各协议自身格式 ?协议属性=值 & 协议属性N=值 属性 必须? 缺省值 说明 address yes 端点URI地址: HTTP端点:http://user:pwd@host:port/path FTP端点:ftp://user:pwd@host:port/path FILE端点:file://path VM端点:vm://path SMTP端点:smtp://user:pwd@host:port POP3端点:pop3://user:pwd@host:port ... ref no 引用一个端点名,不可和address同时使用  XML实例 or 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. SMTP/SMTPS端点  SMTP/SMTPS端点只能作为出口端点使用,当访问的SMTP服务器要求SSL认证,应 使用SMTPS协议。SMTP端点一般用来做异步邮件通知,默认将上一节点传来的数据 作为邮件正文发送到指定邮箱(上一节点输出数据要求是String类型)。常用的属性有: 属性 必须? 缺省值 说明 host yes SMTP服务器DNS或IP,例如: QQ邮箱:smtp.qq.com GMAIL(要求SSL):smtp.gmail.com port yes SMTP服务器端口,一般是25。(GMAIL的是465) user yes 登录SMTP服务器的用户名 password yes 登录SMTP服务器的密码 to yes 收件人邮箱 from no 发件人邮箱,有些SMTP服务器要求是登录用户的相同 邮箱,例如:QQ邮箱。有些服务器不检查,总是SMTP 登录用户邮箱,如:GMAIL服务器 subject no 邮件主题 cc no 逗号分隔的抄送邮件列表 bcc 逗号分隔的暗送邮件列表 replyTo no 默认的回复邮件的收件人邮箱 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. POP3/POP3S端点  POP3/POP3S端点只能作为入口端点使用,当访问的POP3服务器要求SSL认证,应 使用POP3S协议。POP3端点作为入口默认每60秒检查指定邮箱是否有新邮件到达, 如果有则下载邮件并将邮件正文作为数据向下一节点传递。常用的属性有: 属性 必须? 缺省值 说明 host yes POP3服务器DNS或IP,例如: QQ邮箱:pop.qq.com GMAIL(要求SSL):pop.gmail.com port yes POP3服务器端口,一般是110。(GMAIL的是995) user yes 登录POP3服务器的用户名 password yes 登录POP3服务器的密码  可通过定义全局POP3端点连接器来设置更多属性,例如:POP3的定时检查时间、 下载邮件后是否删除。  可通过在邮件端点定义邮件消息转换器子节点来对数据类型进行转换,例如:  更多SMTP/POP3邮件端点的使用方法 http://www.mulesoft.org/documentation/display/MULE3USER/SMTP+Transport+Reference http://www.mulesoft.org/documentation/display/MULE3USER/POP3+Transport+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. VM端点  VM端点是通过MULE的内存队列来进行入/出口的通讯,作为出口端点时将数据写入内 存队列,作为入口端点使用时侦听一个内存队列当队列,当有数据到达时读取数据并 向下传递。VM端点在本应用内的内存队列名称必须是唯一的,有且只能有一个对该队 列的入口端点侦听,并不能用来在多个ESB应用之间进行交互,常用的属性有: 属性 必须? 缺省值 说明 path yes 内存队列名称,每个ESB应用内必须唯一 exchange-pattern yes one-way one-way:单向队列,出口时数据发出即返回不等待 request-response:回向队列,出口时数据发出后等待 responseTimeout no 作为回向队列时等待应答的超时时间(ms) address no URI地址:vm://path  VM端点默认使用内存作为消息队列,只在ESB应用运行期间有效,也可以通过配置 全局VM连接器设定持久化参数,消息将被持久化为文件进行保存,直到被入口侦听 读取后才从队列中删除 maxOutstandingMessages:队列最大保存的消息数  更多VM端点的使用方法参见官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/VM+Transport+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. JETTY端点  Jetty端点使用开源的Jetty框架提供JSP和Servlet的运行容器,Jetty框架是一 个非常优秀的嵌入式Servlet容器,可以替代Tomcat作为WEB应用程序的服务 器来使用。在MULE ESB中使用Jetty入口端点来启动一个常规的Web应用程 序的配置方法如下: 在${app.home}/webapps路径下按目录存放Web应用,访问URL如下: http://localhost:8038/Web应用目录名/ 该方式支持多个Web应用,在Web应用的web.xml中引入如下配置使WEB应 用能导入一个Mule ESB的服务编排 org.mule.config muledemo-config.xml  还可以通过Jetty框架的jetty.xml配置文件来发布Web应用程序,使用方法可参考Jetty 开源框架的文档和Mule ESB官方文档: http://www.mulesoft.org/documentation/display/MULE3USER/Jetty+Transport+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. STDIO端点  Stdio端点用作入口端点时从System.in接受用户输入并向下一节点传递,作为 出口端点时可将数据输出到System.out或System.err。一般可用于调试组件, 模拟数据来源时使用。常用的配置方法如下: messageDelayTime:提示输入前的延时时间(ms) promptMessage:输入提示符 outputMessage:出口端点输出信息时的前缀  更多使用方法可参考官方文档: http://www.mulesoft.org/documentation/display/MULE3USER/STDIO+Transport+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. TCP/UDP端点  TCP/UDP端点作为入口端点使用时使用TCP或UDP协议创建套接字服务器侦听端口来 接收客户端请求;作为出口端口使用时相当于客户端向外部服务器发送套接字请求, 主要的配置属性有: 属性 必须? 缺省值 说明 host yes Socket服务器DNS或IP port yes Socket侦听端口 exchange-pattern yes request-response:请求-应答模式 one-way:单向模式  可通过定义全局TCP/UDP端点连接器来设置更多属性套接字配置属性以及数据格式。 默认创建的的TCP/UDP服务器只在客户端发送完数据关闭连接后才把所有收到的数据 触发向下一节点传递。  更多TCP/UDP端点的配置使用方法参见官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/TCP+Transport+Reference http://www.mulesoft.org/documentation/display/MULE3USER/UDP+Transport+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. JDBC端点  JDBC端点的作用是用来与数据库进行交互,它使用spring管理数据源。作为入口端点 使用时定时执行配置指定的查询SQL语句(只能是SELECT或Procedure),并将返回的 记录集按每行一个Map对象分别向下传递出来。作为出口端点使用时可将传来的Map数 据做为参数绑定到SELECT/NSERT/UPDATE/DELETE/Procedure等SQL语句中执行. 要配置使用JDBC端点,一般分三个步骤:  配置或导入spring的数据源配置  定义全局JDBC连接器关联数据源、配置SQL语句并命名  定义JDBC入口端点或出口端点关联全局连接器,指定要执行的SQL名称  配置spring数据源的方法如下示例: 更多spring配置数据的方式可以参考spring的相关文档 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. JDBC端点 - 2  配置全局JDBC连接器,主要的常用配置属性有: 属性 必须? 缺省值 说明 name yes 连接器名字 dataSource-ref yes 关联的数据源名字 pollingFrequency no 入口端点定时执行SELECT语句的时间(ms) queryTimeout no -1 查询超时  通过定义jdbc:query子节点来配置SQL语句,例如: 名字.ack的SQL语句将被Mule在执行完对应名称的SQL后每行记录自动执行一次。 #[map-payload:字段名] 用来在SQL中引用Map来源数据的指定字段 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. JDBC端点 - 3  配置JDBC端点,指定要执行的SQL名称,主要的常用配置属性有: 属性 必须? 缺省值 说明 queryKey yes jdbc:query节点定义的SQL名称 address no URI地址,不和queryKey同时使用,格式如下: jdbc://queryKey pollingFrequency no 入口端点定时执行SELECT语句的时间(ms) queryTimeout no -1 查询超时(ms)  除了在全局连接器定义SQL,也可以在端点中定义jdbc:query子节点来配置SQL语句, 方法和全局JDBC连接器的定义方式一致  通过定义jdbc:transaction子节点来配置执行SQL时是否开启事务,示例如下: 事务:NONE、ALWAYS_BEGIN、BEGIN_OR_JOIN、ALWAYS_JOIN、JOIN_IF_POSSIBLE 事务控制从入口端点开始到出口端点或Flow流结束,如果中间有异常发生将被回滚 只有JDBC、JMS、VM等端点可以配置事务  更多JDBC端点的使用配置参见官方文档: http://www.mulesoft.org/documentation/display/MULE3USER/JDBC+Transport+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. JMS端点  JMS端点是用来连接基于Java消息服务(Java Message Servic)规范的JMS服务器,向 JMS服务器发送消息或者从JMS服务器获取消息。JMS是Java平台上有关面向消息中 间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准 的产生、发送、接收消息的接口简化企业应用的开发。业内最常见的JMS服务器是开 源的Apache ActiveMQ,Mule ESB的JMS端点支持连接多种JMS服务器。使用JMS端 点可以在多个支持JMS消息服务的应用之间信息数据交互,在MuleESB中配置JMS消 息服务一般分三个步骤:  定义全局JMS连接器来连接指定的JMS服务器  定义JMS入口端点从JMS服务器读取消息  定义JMS出口端点向JMS服务器发送消息  定义全局JMS连接器用来连接各种JMS服务器,Mule ESB提供了简化的ActiveMQ连 接器以及标准的jms:connector来连接各类其他JMS服务器,我们以ActiveMQ为例: 使用标签定义ActiveMQ的连接器,它的常用属性有: 属性 必须? 缺省值 说明 name yes ActiveMQ连接器的名字 brokerURL no 为空则Mule ESB将使用vm://localhost创建一个只能本 应用内访问的JMS消息服务,相当于VM端点的使用方 式。 不为空则应该是AvctiveMQ的访问地址,一般是: tcp://localhost:61616 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. JMS端点 - 2  定义JMS端点来读取或发送消息到JMS服务器,JMS的消息分为点到点和发布/订阅两 种模式:  点到点:消息被发送到JMS服务器消息队列中保存直到被某个消息接收者读取,每个消息只 会被访问该JMS队列接收者中的一个读取一次。在JMS服务器运行期间消息一直会 保存在一个先进先出的队列中,服务器重启消息将丢失或者在JMS服务器进行配置 将消息持久化到文件或数据库等。  发布/订阅:消息可以被多个订阅该消息主题的订阅者接收,但要求订阅者在消息发布时连线 在JMS服务器。除非订阅者建立了持久的订阅,在订阅者未连接时发布的消息才 会在订阅者重新连接时重新发布给订阅者。  JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许发送并接收以一些 不同形式的数据  StreamMessage:Java原始的数据流,对应java.io.InputStream  MapMessage:Map集合,对应java.util.Map  TextMessage:字符串数据,对应java.lang.String  ObjectMessage:一个可序列化的 Java对象,对应 java.lang.Object  BytesMessage:字节数组,对应byte[] Mule ESB的JMS端点会自动将来源数据或传出数据与标准JMS消息数据格式之间进 行转换 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. JMS端点 - 3  JMS端点的常用属性有: 属性 必须? 缺省值 说明 queue yes 点到点模式时的JMS队列名称,不能和topic同时 使用 topic yes 发布/订阅模式时JMS的消息主题名称,不能和 queue同时使用 durableName no 只在入口端点使用,持久化订阅者的名字,如 果对同一个发布主题有多个持久化订阅者,该 名字必须唯一  当使用持久化订阅入口端点时,必须在指定连接器属性: durable="true" clientId="唯一的ID"  更多JMS端点的使用方法以及JMS的资料可参考Mule ESB官方文档和JMS规范文档 http://www.mulesoft.org/documentation/display/MULE3USER/JMS+Transport+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. 常用的组件(compoent)  组件一般用来执行某个操作处理,对传入消息数据进行处理并 传出消息数据下一编排节点,常用的组件有:  REST 服务组件  SOAP 服务组件  Java 组件  Flow Reference 流引用组件  Echo 组件  Logger 组件  更多组件参见官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Configuring+Components 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. REST服务组件  REST服务组件,一般编排在HTTP入口端点后面,使用Jersey框架对外提 供REST请求服务,常用属性有 属性 必须? 缺省值 说明 class yes 基于JAX-RS的Java类  JAX-RS的Java类采用注释注入方式进行编写,常用的注入属性有 属性 必须? 缺省值 说明 @Path yes 可以在对象类或方法上注入,对应REST访问 的URL路径 @GET yes 在类方法上注入,指明方法被调用的HTTP方 法,可以是@GET、@PUT、@DELETE等 更多REST服务类的注入写法请参考JAX-RS文档和Mule官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Jersey+Module+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. SOAP服务组件  SOAP服务组件,一般编排在HTTP入口端点后面,使用CXF框架对外提 供WebService请求服务,常用属性有 属性 必须? 缺省值 说明 serviceClass yes 基于JAX-WS的Java类  JAX-WS的Java类采用注释注入方式进行编写,常用的注入属性有 属性 说明 @WebService(serviceName="XX") 在对象类上注入,对应WS访问的URL路径 @WebParam(name="XXX") 在类方法参数上注入,指明参数对应的URL路径 @WebResult(name="XXX") 在类方法上注入,指明方法返回数据在WS应答XML的 节点 WS访问URL:http://host/service/OPERATION/PARAM_NAME/PARAM_VALUE 更多REST服务类的注入写法请参考JAX-RS文档和Mule官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/CXF+Module+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. JAVA组件  JAVA组件可编排在任一节点后面,执行一个指定JAVA类的方法函数,可 以在编排时指定方法名或不指定MULE将根据上一节点的传出数据类型查 找JAVA类中唯一输入参数类型匹配的方法,Java组件根据对象构造创建的 时间点分几种定义标签:  每一次访问请求都重新创建Java对象类  Java对象类在ESB应用启动时自动被创建且在服务运行期间只构造一次 或者使用Spring bean id指定类对象  Java对象类只在ESB应用中创建一次,且是在收到第一次访问请求时才构造 或者使用Spring bean id指定类对象 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. JAVA组件 - 2  Mule ESB除了singleton-object、sping-object,还有一种prototype-object 对象工厂,其中: singleton-object:单例对象,表示Java对象类只创建一次,即只被new构造一次 sping-object:spring对象由spring类工厂管理,遵循spring标准,也是只构造一次 prototype-object:普通Java类,由Mule管理,遵循父节点的配置 :每次请求都重新new对象 :遵循Mule对象池配置原则,第1次请求时构造 以上三种对象都支持通过子节点来设定构建Java Bean时 调用setXXXXX方法来设置配置的自定义数据,支持spring的property 方法,spring支持value(String)、list、map、properties、set、bean(Object)类型: 22222222222 33333333333 在构造完com.efuture.Test类后,将调用类的setValue(String)方法和setList(List) 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. JAVA组件 - 3  执行指定Java类对象的类方法的定义标签: 上述定义表示执行spring对象congou.sample.Demo的methodB方法  编排时不指定类方法,则MULE服务器将根据上一节点的传出数据类型查 找JAVA类中输入参数类型匹配的唯一方法,如果没找到匹配方法或找到多 个方法,则ESB服务执行报错  调用组件方法时如果方法没有返回值(void),MULE会把该方法的输入参数 以对象引用的方式作为Mule消息的输出数据向下节点继续传递。  更多Java组件的配置使用方法参见官方文档: http://www.mulesoft.org/documentation/display/MULE3USER/Component+Configuration+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Flow引用组件和Echo组件  Flow Reference 流引用组件可编排在任一节点后面,表示将上一节点数据 传入另一个FLOW流程,相当于引用子流程 属性 必须? 缺省值 说明 name yes 对应子流程FLOW的name属性值,FLOW的 name在一个ESB应用的多个XML编排文件都 必须是唯一的  Flow Reference 流引用组件编排示例:  Echo 组件的作用是将节点收到的数据简单的输出到控制台,并不对数据做 任何处理直接再传递到下一节点,一般可在编排中加入Echo组件用来跟踪 流程是否被运行以及接收到的消息数据供分析,Echo 组件的编排示例如下 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Logger 组件  Logger 组件和Echo组件一样都可用来在流程中记录显示一些日志信息, Logger 组件比Echo组件更灵活,可以配合表达式过滤器记录一些更详细 的信息到输出控制台,节点标签是logger,它的属性有: 属性 必须? 缺省值 说明 level yes DEBUG 日志级别:INFO/DEBUG/ERROR/WARN/TRACE 一般使用INFO级别任何传入数据都将被记录输出 message no 输出到控制台的信息字符串,可以加入一些 #[:]表达式,例如: #[payload] 表示传入的数据 #[header:Content-Type] 表示HTTP的Content-Type 为空则记录MuleMessage的信息,就是#[header] 当需要根据传入数据达成某条件时才记录日志时,应配合表达式过滤器使用进行使用。 需要用标签将Logger组件和表达式过滤器括起来  更多Logger组件的使用方法参见官方文档: http://www.mulesoft.org/documentation/display/MULE3USER/Logger+Element+for+Flows 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. 常用的转换器(transformer)  转换器主要用来当前后两节点输出输入数据类型不一致时,对消息数据类型进行转 换,MULE ESB提供的标准转换器常用的有:  Object-to-Xml / Xml-to-Object  Transformer Ref 转换器引用  Custom Transformer自定义转换器  Append 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  Message Property Scopes / Expression-transformer  Encryption / Decryption  GZipCompressTransformer / GZipUncompressTransformer  更多转换器请参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Using+Transformers  我们预设的几种自定义转换器  JsonToMap / MapToJson (Json数据串和Map格式的数据互相转换)  JsonToStructMsg / StructMsgToJson (Json数据串和StructMsg类对象互相转换)  ObjectToOJson / OJsonToObject (Object对象和Json数据串互相转换,数据中含类名)  SplitterRestJsonDataToMap (拆分Json格式数据串的data字段数据转为Map)  SplitterRestJsonDataToStructMsg (拆分Json格式数据串的data字段转为tructMsg )  SplitterRestStringData (拆分Json格式数据串的data字段数据作为纯字符串) 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Transformer Ref 引用转换器  该转换器节点实际是引用一个全局定义的转换器,一般我们使用都在每个 编排配置文件先定义Global Elements全局转换器,然后再在编排FLOW中 引用,定义属性有: 属性 必须? 缺省值 说明 name yes 被引用转换器的名字,该在每个ESB应用中必须全 局唯一,即使是多个编排配置文件中也必需是唯 一的 returnClass no 所有转换器都具有的属性,转换返回指定Java Class ignoreBadInput no false 所有转换器都具有的属性,是否忽略不识别的数据 encoding no 所有转换器都具有的属性,转换消息的编码格式 mimeType no 所有转换器都具有的属性,设置消息的mime Type  转换器编排实例  更多使用方法可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Transformers+Configuration+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. ObjectToXML / XMLToObject  看名字可知这两个转换器是把Object对象类型和XML格式串进行相互转换 ,这两个转换器是基于XStream框架进行对象转换的,不仅支持Object到 XML的转换,还支持Object到JSON格式的转换,常用的定义属性有: 属性 必须? 缺省值 说明 name yes 转换器名字,在每个ESB应用中必须全局唯一, 即使是多个编排配置文件中也必需是唯一的 driverClass no 将Object转换成Json格式时的驱动类名,xstream框 架支持的两种Object到JSON格式的驱动类 com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver  转换器编排实例 or  更多使用方法可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/XmlObject+Transformers 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. ObjectToJson / JsonToObject  看名字可知这两个转换器是把Object对象类型和Json格式串进行相互转换 ,这两个转换器是基于Jackson框架进行对象转换的,常用的定义属性有: 属性 必须? 缺省值 说明 name yes 转换器名字,在每个ESB应用中必须全局唯一, 即使是多个编排配置文件中也必需是唯一的 sourceClass yes 将Object转换成Json格式时来源对象的类名 returnClass yes 将Json转换成Object格式时输出对象的类名  转换器编排实例 or  更多使用方法可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Native+Support+for+JSON 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Custom 自定义转换器  该转换器指定一个Java类作为转换处理,允许用户自己编写两个数据类型 的转换操作,该Java类一般通过重载AbstractTransformer类doTransform 方法来实现数据转换,Custom转换器的常用定义属性有: 属性 必须? 缺省值 说明 name yes 被引用转换器的名字,该在每个ESB应用中必须 全局唯一,即使是多个编排配置文件中也必需是 唯一的 class yes 用于转换数据的JAVA实现类,该Class一般重载 AbstractTransformer的 protected Object doTransform(Object src, String encoding)  转换器编排实例  更多使用方法可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Creating+Custom+Transformer+Class 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. 其他几种标准转换器  Encryption / Decryption 看名字可知这对转换器是用来加密和解密的,它们 是把byte[]字节数组的来源数据进行加密和解密后,输出被处理后的byte[] 字节数组数据,编排示例如下:  GZipCompress / GZipUncompress 看名字可知这对转换器是用来压缩和解 压缩的,GzipCompress是把来源对象压缩输出为byte[]字节数组, GZipUncompress是把来源的byte[]字节数组解压缩为byte[]字节数组 示例如下:  更多使用方法可参考官方文档 http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/transformer/encryption/package-summary.html http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/transformer/compression/GZipUncompressTransformer.html 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Append String 转换器  该转换器对String的来源数据追加一个配置指定的字符串,定义属性有: 属性 必须? 缺省值 说明 name yes 转换器名字 message yes 追加的字符串,可以引用Mule识别的表达式  转换器编排实例  其他几种字节数组到对象的转换器示例:  更多使用方法可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Using+Transformers 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Message Property Scopes  Mule ESB的消息在两个节点中传递是以一个MuleMessage的对象进行的,我 们前面说的消息转换器都是对消息中用户数据部分(payload)的转换,消息中 还有很多上下文Context属性,例如HTTP请求的host、Content-Type等,这 些属性都被封装在MulMessage中的Inboud和outbound域中,可以通过API MuleMessage message = RequestContext.getEvent().getMessage(); message.getInboundProperty() 和 message.setOutboundProperty()等方法访 问和修改,或通过编排进行转换操作: 可以通过以下方法引用来源消息#[header:INBOUND:属性名]  更多使用方法参见: http://www.mulesoft.org/documentation/display/MULE3USER/Message+Property+Scopes 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Expression-transformer  Expression-Transformer 转换器是根据指定的评估器和表达式来截取来源消 息中的部分数据向下传递,示例如下: 上面三个表达式过滤器的意思是: 1、把来源数据作为Bean,转换器返回Bean的getCustomer方法返回的数据 2、使用Groovy语法对来源数据进行操作处理,Groovy是一种开源的JAVA平台编程语法 3、截取来源数据中为host的上下文Property信息  更多评估器和表达式的使用方法参见官方文档: http://www.mulesoft.org/documentation/display/MULE3USER/Expressions+Configuration+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. 常用的流控制器(FlowControl)  流控制器用来控制流程信息的走向,用来根据上一节点的输出 数据进行分支筛选,常用的流控制器主要有以下几种:  Splitter 数据拆分器  Choice 分支选择器  All 多路分发器  更多流控制器请参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Routing+Message+Processors 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Splitter 数据拆分器  该拆分器的作用是将前一节点的数据根据指定鉴别器和表达式,对数据进 行截取并传递到下一节点,不同的鉴别器对应的表达式格式是不一样的, 主要的定义属性有: 属性 必须? 缺省值 说明 evaluator yes 数据鉴别器,支持多种预定钱别器: json 将数据作为为JSON格式进行鉴别 groovy 根据数据对象类型进行鉴别 string 将数据作为字符串文本进行鉴别 ... expression yes 依据不同的鉴别器设定对应的拆分表达式,如最 常用的json鉴别器的表达式格式就是要拆分数据 的key  拆分器编排实例 上述实例意思是将传入的json数据中key为data的数据截取出来并向下传递  更多鉴别器和表达式的写法可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Expressions+Configuration+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Choice 分支选择器  分支选择器的作用是根据前一节点的数据按照指定鉴别器和表达式进行流 程选择,鉴别器和表达式的定义方式和拆分器相似,定义结构如下:  when 标签定义分支判断条件,例如上述编排意思是当JSON数据的component字段等于 congou.sample.Demo时执行serviceFlow-congou_sample_Demo子流程  otherwise标签定义判断的否则条件(即else),上述例子意思是当判断条件都不满足时执行 serviceFlow-Other子流程  processor-chain标签表示一个流程节点的集合  更多鉴别器和表达式的写法可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Expressions+Configuration+Reference 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. All 多路分发器  多路分发器的作用是将前一节点的数据逐一发送给编排在节点下的各分支 流程,并汇总每个分支流程最终的输出数据形成一个List对象,作为分发器 的输出数据再向下一节点传递,所有分支流程都执行完才向下一节点传递:  processor-chain标签表示一个流程节点的集合  更多鉴别器和表达式的写法可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Routing+Message+Processors 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. 其他几种节点元素  范围容器(Scope)  Async  Composite-source  Message Enricher  Poll  Processor-Chain  Response  Custom-processor  更多流程消息容器可参考官方文档 http://www.mulesoft.org/documentation/display/MULE3USER/Routing+Message+Processors  过滤器(Filter)  Expression  ...  外部云连接器 (Cloud Connector)  Mongo DB  ... 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Async / Composite-Source  Async 范围容器用来标识一个异步流程,当一个流程节点的后一节点是异 步容器时,表示将本节点的输出数据采用异步方式发往异步容器中的流程 并不等待这些流程执行完。Async 异步范围容器内可编排其他流程节点:  Composite 集成容器用来在集成多个入口端点,当收这多个入口端点的请 求中任意一个时都执行对应FLOW。 Composite 集成容器内可编排多个入口端点: 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Processor-Chain / Response  Processor-Chain 范围容器用来在标识一组节点集合,相当于括号这种概 念,常用在Choice节点的when标签和All节点中:  Response 应答返回容器一般都作为HTTP、TCP等具有应答返回属性的入 口端点的子节点存在或者紧跟在这些端点后面的下一节点,用来标识这些入 口端点的的应答消息的处理节点。 (Mule 3.x以后可通过端点的responseTransformer-refs属性来指定对应答消 息做转换的转换器列表,多个转换器用空格分隔) 例如,对HTTP的应答消息进行数据转换编排: 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. 常用的过滤器(Filter)  过滤器的作用是编排在服务流程中进行判断检查,当过滤器的检查结果为 true时,会将消息继续向下传递;当过滤器的检查结果为false时返回null 并终止流程传递(入口端点的response也被忽略)。过滤器不仅可以直接编 排在服务FLOW中,也可以作为端点endpoint的子节点进行定义,用于过 虑端点收到的无效数据,各类端点都有一些端点自有的过滤器,具体参考 端点的官方文档。Mule ESB几种标准过滤器如下:  Payload Type Filter  Expression Filter  RegEx Filter  Message Property Filter  Wildcard Filter  Exception Type Filter  Logic Filters  Custom Filters  Filter Ref  更多过滤器参见 http://www.mulesoft.org/documentation/display/MULE3USER/Using+Filters 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. 常用的过滤器(Filter) - 续  Payload Type Filter 过滤器用来检查一个消息数据类型是否匹配  Expression Filter 过滤器根据指定的评估器和表达式进行判断 表达式可参考: http://www.mulesoft.org/documentation/display/MULE3USER/Expressions+Configuration+Reference  RegEx Filter 过滤器依据正则表达式判断字符串类型的消息数据是否匹配  Message Property Filter 过滤器判断MuleMessage中的属性是否匹配 pattern的格式是:Property=Value caseSensitive表示是否大小写敏感,默认是大小写敏感的  Wildcard Filter 过滤器依据通配符判断字符串类型的消息数据是否匹配  Exception Type Filter 过滤器检查一个异常类型是否与指定异常类匹配  Filter Ref 引用一个已定义的全局过滤器 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. 常用的过滤器(Filter) - 续2  Logic Filters 过滤器用来实现多个过滤器的逻辑运算组合:and、or、not  Custom Filter 过滤器允许用户自定义一个JAVA类来实现判断检查,该类需要实现 org.mule.api.routing.filter.Filter接口,重载 public boolean accept(MuleMessage message)方法,支持spring:property来配置 Spring Bean的setXXX方法设置类成员变量 有 流 通, 就 有 富 基 融 通 where is consumer, there is eFuture. Mule ESB 运行时的异常捕获  Mule ESB的消息在流服务中传递时如果发生异常,Mule ESB服务器会将异常信息 输出到本地日志文件中,如果希望捕获该异常进行处理,可以在Flow中编排异常策 略节点: 在异常策略节点内可编排一个出口端点,Mule ESB将把异常错误信息以数据传给该 出口端点(数据类型为org.mule.message.ExceptionMessage),缺省的异常处理策略 节点具有以下两个属性: enableNotifications:默认为true,是否触发异常处理策略 stopMessageProcessing:默认为flase,是否停止flow服务,如果为true则流程服务将被停止,服务 器重启前不能再相应请求。  除开缺省的异常处理策略外,Mule ESB还提供用户自定义策略节点: class指定一个JAVA类来处理异常,该Java类必须实现ExceptionListener接口,可继 承于org.mule.exception包下的标准异常策略类。  更多使用方法可参考官方文档: http://www.mulesoft.org/documentation/display/MULE3USER/Error+Handling http://www.mulesoft.org/documentation/display/MULE3USER/Exception+Strategy+Configuration+Reference
还剩55页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 4 人已下载

下载pdf

pdf贡献者

cutehoney

贡献于2013-09-28

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf