·本书样例采用MuleESB3.3·进行MuleESB开发的前提:■jdk6.0以上■MuleStudio■PostgreSQL数据库■seleniumIDE自动化测试工具1MuleESB入门1.1ESB·MuleESB是轻量级Java编程语言。用于整合不同应用,或者不同系统间的通信。可以轻松整合现有系统,而忽略应用使用的不同的技术,包括:JSM、WebService、JDBC、HTTP·ESB(EnterpriseServiceBus):一个应用为其他应用或服务提供访问。为企业提供基于消息的主干。一条ESB总线,适用于中间系统,整合了不同的应用。所有这些应用通过ESB进行通信。ESB由一系列服务容器,整合了各种类型的应用。这个容器通过可靠的消息总线进行互联。·ESB的主要特性:1)使用JMS2)消息转换、路由服务3)Tomcat热部署4)WebService安全·ESB主要功能VETRO:1)V-validatetheschemavalidation:验证schema的有效性2)E-enrich:充实3)T-transform:转换4)R-route:路由(基于线路或者上下文)5)O-operate:执行操作,运行在后端使用ESB之前,系统间交互只能通过点对点进行联通使用ESB之后,系统都可以通过ESB访问其他系统·需要使用ESB的场景:1)整合超过两三个的服务或应用2)在未来整合更多应用、服务、技术3)使用不同的通信协议4)发布供整合和消费的服务5)消息转换及路由1.2MuleESB·MuleESB为开发者提供快捷应用整合功能。有社区版和企业版两种。·企业版对MuleESB进行企业级扩展:集群、性能优化、DataMapper、SAP连接社区版与企业版都在相同代码体系下开发,因此社区版很容易升级为企业版·MuleESB的特性:1)服务创建与建主(hosting):使服务重用2)服务调制(Servicemediation):MuleESB将服务的消息格式和协议进行屏蔽;将业务逻辑分解为消息;本地独立服务调用3)消息路由(Messagerouting):基于上下文、角色将消息进行路由、过滤、聚合、重新序列号4)数据转换(Datatransformation):可以将数据转换为各种格式通过各种协议进行数据的交换·MuleESB的工作原理·MuleESB的配置1)服务组件开发:可以开发或者重用POJO/云连接器/Spring的Bean,其中的业务逻辑都可以复用或扩展2)服务编排(Serviceorchestration):配置消息处理器(messageprocessor)、路由器(router)、转化器(transformer)、过滤器(filter),使用MuleESB流程提供松耦合的服务的调制与编排。新编排的元素可以在开发过程中创建或删除3)整合(Integration):MuleESB可以通过不同的连接器接受和发送不同协议的消息。这些连接器在MuleESB的编排层(orchestrationlayer)配置文件中配置。MuleESB支持主流的通信协议,也可以对协议进行扩展。4)SpringBean:可以通过spring的bean或者Spring的组件配置文件构建服务组件。5)代理(agent):MuleStudio创建的服务。随服务器启动而启动,随服务器停止而停止6)连接器(connnector):软件组件7)全局配置(Globalconfiguration)8)全局端点(GlobalEndpoint):可以在流程中多次使用9)全局消息处理器(Globalmessageprocessor):可以修改消息或者消息流程(messageflow)10)转换器(Transformer):将数据从一种格式转换成另一种格式11)过滤器(Filter):决定哪些消息需要被处理12)模型(Model):MuleStudio创建服务的逻辑分组13)服务(Services):可以创建一个或多个服务组成组件14)端点(Endpoint):服务通过端点进行连接。在其上可以接收(inbound)/发送(outbound)消息15)流程(Flow):通过消息处理器定义源与目的端的消息1.3配置MuleIDE1配置JDK环境环境2可以在eclipse中配置MuleESB插件,一般直接使用MuleStudio即可3下载MuleStudio□MuleStudio的三个组件:1)包树2)调色板(palette):可以拖拽各种端点、组件、转换器、连接器等到流程面板构建流程。3)画布(canvas):图编辑器,在上面可以创建流程。1.4调色板中的各元素1端点(Endpoint)·通常端点发送/接收数据,负责连接外部资源、传递消息。分为Inbound(接收消息)、Outbound(发送消息)。■FTP端点:通过FTP服务器读取文件。■文件端点:从文件系统读取文件■一般端点(GenericEndpoint):采用通过Mule表达式或者特定的路径动态的方式配置一个端点。■HTTP端点:用于执行HTTP请求或者响应。采用http、https(SSL协议)协议发送或接收请求。■JMS端点:利用JMS队列发送/接收消息■VM端点:利用内存队列整合相同的Mule配置下的不同流程或服务2组件(Component)■普通组件(Generalcomponent):嵌在普通组件中的逻辑不能修改。日志记录器(Logger)、流程引用(FlowReference)、输出(Echo)属于这类。■脚本组件(Scriptcomponent):不包括预先包装好的逻辑,允许开发者自定义逻辑(自定义脚本或者Java类)。这类组件还允许:①配置拦截器(interceptor)②添加Springbean③修改相关类中的属性的值或者引用■WebService组件:MuleESB使用SOAP或者RESTful协议连接外部的WebService。WebService组件使用CXF和Jersey服务,将消息从Java转换为XML。□常用组件①输出(Echo):向控制台输出消息②日志(Logger):通过表达式输出日志③REST:通过Jersey事REST服务生效。REST是一个基于资源、连接、统一接口的格式的HTTP架构。④SOAP:通过CXF在Studio中配置SOAP组件。可以在Mule流程中执行如下操作:△发布简单服务△发布JAX-WS服务△代理已发布的服务△通过简单客户端消费服务△通过JAX-WS客户端消费服务△为服务做代理使用SOAP组件可以控制服务安全、数据绑定、为CXFwebservice添加拦截器3转换器·转换器将消息转换成目的端能够接受的格式。■常规转换器(CustomTransformer):可以将小组转换成另一种格式,或者修改消息内容,如头、附件等。如XML转换器■对象到XML转化器(Object-to-xmltransformer):利用XStream将Java对象转换成XML形式。■脚本转换器(ScriptTransformer):将脚本组件当转换器使用。■转换器引用(TransformerRef):引用全局转换器■XSLT转换器(XSLTTransformer):通过XSLT转换XML■Xml到对象转换器(Xml-to-ObjectTransformer):使用XStream将XML转换为JavaBean4过滤器(Filter)·过滤器过滤符合条件的消息才路由到特定服务或者后续的流程■常规过滤器(CustomFilter):用户自主实现的过滤器。用户自己实现Filter接口■异常过滤器(ExceptionFilter):异常过滤器匹配异常类型■表达式过滤器(ExpressionFilter):通过不同的识别器识别不同类型的表达式■消息属性过滤器(MessagePropertyFilter):允许在自定义路由器根据消息的属性值上添加逻辑■过滤器引用(FilterReference):引用全局过滤器■正则表达式过滤器(RegularExpressionFilter):对消息使用正则表达式进行过滤■通配符过滤器(WildcardFilter):通过通配符匹配字符串型消息■负载过滤器(PayloadFilter):检查消息内部负载对象的类型5路由器(Router)·控制或者路由流程中的消息到各种目的地。■全部(All):将消息传递给多个目标■选择(Choice):路由器将消息传递给第一个符合条件的处理器6云连接器(CloadConnector)·用于将应用轻易的整合到第三方■Salesforce:通过SalesforceAPI允许用户查询、创建、修改Saleforce中的信息■Twitter:通过Twitter的API接口,整合Twitter1.5开发Helloworld应用1)在MuleStudio中创建一个Mule工程2)选择Helloworld模板,创建工程3)创建完的工程,如下:4)创建一个Java类1.packagecom.wuji1626;2.3.publicclassSayHi{4.5./**6.*@paramargs7.*/8.publicstaticvoidmain(String[]args){9.//TODOAuto-generatedmethodstub10.11.}12.13.publicStringSayHello(Stringstr){14.returnHello+str;15.}16.17.}5)从调色板中拖拽HTTP端点到画布中6)双击编辑该端点,配置使用默认值即可。(主机:localhost,端口:8081)7)拖拽Java组件到画布,由于未指定Java对应的类,因此有“×”8)双击Java组件,设置Java的类9)右键点击【*.mflow】文件,【runasMuleApplication】10)控制台显示“Startedapp'hellomule'”,表示运行成功11)在浏览器中输入:页面返回如下:2组件与模式的使用2.1HTTP端点·HTTP端点有【请求-响应】模式、【单向】模式·单向模式·请求-响应模式·HTTP端点的编辑页面,可以指定主机名、端口2.2Java组件·Java组件可以指定java类2.3自定义过滤器(CustomFilter)·当特定条件满足时,消息会被路由到一个服务上。可以指定自定义的过滤器class,该类必须继承Filter接口。2.4输出组件示例·创建一个使用HTTP、日志及输出组件的实例。1)创建一个mflow2)拖拽HTTP、Logger、Echo空间到flow上·HTTP组件配置如下:·Logger组件配置如下:·Echo组件配置如下:·流程配置如下:3)运行mflow·浏览器中输入:http:\\localhost:8585\zhangwenhe控制台输出:【注】在执行MuleApplication相当于执行脚本:mulemy-config.xml其中my-config.xml就是mflow生成的xml文件1.?xmlversion=1.0encoding=UTF-8?2.3.mulexmlns:http==:doc=:spring==EE-3.4.0xmlns:xsi=:schemaLocation=