Apache Synapse ESB介绍.docx_第1页
Apache Synapse ESB介绍.docx_第2页
Apache Synapse ESB介绍.docx_第3页
Apache Synapse ESB介绍.docx_第4页
Apache Synapse ESB介绍.docx_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Apache Synapse ESB简要介绍林浩生2011-6-3一、 简要介绍ESB企业服务总线,是各种业务应用程序和路由之间的中间件,同时还负责转换消息。由于ESB充当了消息传递总线,系统间点对点的连接就不需要了,当一个系统需要与另一个系统通信时,它只是简单的发送一条消息给总线,然后ESB负责决定如何将消息路由到目标端点,消息也在这个过程中被转换为任何所需要的格式。这样ESB就扮演着一个重要的角色,即在不同的协议间做桥接。比如说,与一个ERP系统做接口需要SOAP,但内部的CRM系统可能只支持通过JMS传递XML这种方式,ESB可以在这些协议之间充当翻译,将CRM发出的JMS消息转换成ERP能够理解的SOAP Web服务调用。通常由ESB的“适配器”与那些风格迥异的协议组进行通信,包括SOAP、CORBA、JMS、MQ Series、MSMQ、FTP、POP3、TTP,等等。Apache Synapse 是Apache的一个顶级项目,它是一个简单、轻量级的高性能企业服务总线,是在 Apache Software Foundation 的 Apache License Version 2.0 下发布的。使用 Apache Synapse,我们可以通过 HTTP、HTTPS、JMS、SMTP、POP3、FTP、文件系统和许多其他传输介质筛选、转换、路由、操作和监视经过大型企业系统的 SOAP、二进制文件、XML 和纯文本消息。相对ServiceMix和Mule,Synapse是轻量级的,配置简单的,又能够承担服务中介功能,同时它在实现了所有esb所要具备的功能的同时,还保持了优异的性能。应该是大多数企业的明智之选。下面简单介绍下作为ESB,Synapse所具备的功能:1、 协议适配器Synapse主要是基于Axis 2 web服务引擎构建起来的。它对基于SOAP的web服务支持的很好,包括:ws-addressing、ws-reliablemessaging、ws-security、ws-policy。其他常见的协议,如:jms、tcp、http、https、pop3、smtp、imap也都完整地支持,另外,它还通过apache通用虚拟文件系统支持其他的一些协议,以提供对本地文件系统中或s/ftp上的文件的访问。此外,它还提供压缩的支持,比如:zip、jar、tar、gzip。2、 面向消息的中间件Synapse可以被配置来与任何jms兼容的消息系统交互。通过jms可以创建出高度分布的ESB架构,多个synapse实例可以并行运行,并通过jms的话题或队列进行通信。Synapse支持jms二进制、纯文本、xml和soap消息。3、 基于XML的消息传递Xml是Synapse默认采用的消息协议,synapse对xml强有力的支持包括如验证中介这样的服务,用来验证传入或传出的xml是否符合某个定义好的结构定义。使用xml时,synapse可以透明地切换传输方式,例如接收http的soap消息,放入jms队列。4、 智能路由分发Synapse提供多种途径使用我们称之为选择中介的东西实现路由。可以使用简单地基于正则或xpath表达式的过滤器,或者用一种switch风格的语句实现过滤。求值的基础可以是消息体、消息属性或Uri。Synapse对ws-addressing也有完整的支持,可以将soap消息定向到正确的端点服务。Synapse对于可能出现的错误,也能够配置相应的路由规则。还可以使用脚本语言如groovy、ruby来修改消息属性重定向消息,从而实现更复杂精巧的路由。消息分发特性包括克隆消息,以便它能够被并发送往多个接收者。还可以将消息拆分成多段,每个部分送往不同的服务。除此之外,也可以使用定义了消息相关性规则的xpath表达式在消息到来时将他们聚集在一起。5、 消息转换Synapse支持基于xslt的转换,可以应用到传入和传出的消息上。可以通过xpath表达式有选择的找出消息中你希望转换的部分。更精细的传唤可以使用xquery中介来执行,这也使得我们可以根据外部的xml文档或被支持的xquery数据源来对消息的数据进行补充完善。对错误处理,可以完成soap错误,从而在收到非预期的值时传唤出一个响应。最后,也可以使用脚本来对消息进行转换。6、 任务/定时器对任务的支持指的是可以连续调用的触发器。由任务类决定触发器被触发后要执行的动作。Synapse自带了一个注入器,会往esb中随意放入一个消息。配置任务时,也可以定义它被执行多少次,这要通过设定一个定时间隔来定义它被调用的频率。7、 服务质量/web中介Synapse提供独有的负载均衡、故障转移和消息流量控制/码表限制等功能。8、 监控和管理Synapse提供jmx监控支持,包括:停止和重启,以及基本的使用活动和错误统计信息等。9、 可扩展的API在synapse中创建自己定制的中介是件很容易的事,只需要简单的扩展某个可用的接口类并实现为数不多的方法,这些类正是为这样的目的而设计的。二、 实例(一) Synapse目录结构介绍下载synapse,最新版本2.0,下载地址:/download.html下载后压缩,会有如下的目录结构:看起来和一般的开源软件的目录结构是一样的。以下的说明及用法,均以windows系统为例: Synapse|-bin (命令行程序目录)|-native (针对操作系统的类库目录)|-install-synapse-service.bat (注册为windows服务)|-synapse.bat(启动synapse服务器)|-uninstall-synapse-service.bat(从windows服务列表中删除)|-docs (说明文档目录)|-lib (使用的类库目录)|-logs (存放日志的目录)|-repository (资源库的目录)|-conf (synapse服务器配置文件目录)|-sample (服务器配置例子的目录)|-resources(wsdl文件的例子目录)|-synapse_sample_0.xml (synapse配置的例子,命令行启动的时候,可以通过 “synapse -sample 0”,进行调用,不再加载synapse.xml文件)|-synapse_sample_1.xml(synapse配置的例子,命令行启动的时候,可以通过 “synapse -sample 1”,进行调用,不再加载synapse.xml文件)|-axis2.xml (Axis2服务器配置文件)|-synapse.xml (Synapse服务配置文件)|-perties (Synapse的启动参数,线程数等)|-wrapper.conf(启动参数,JVM大小,目录结构,日记信息等)|-modules (系统类库)|-samples (例子的目录)|-axis2Client (Axis2的客户端程序例子,这部分应该是可以生成的,通过Axis2的命令行工具)|-axis2Server (Axis2的服务端程序的例子,启动Axis2服务器,发布Web Services)|-work (服务器编译后的文件目录)蓝色标记部分为目录,红色标记部分为经常使用的几个文件。(二) 简单实例我们通过两个简单的例子来介绍synapse如何注册服务,操作步骤如下:1. 发布一个Web Services工程。2. 修改synapse.xml的配置文件,和刚才发布的Web Services服务建立关联。3. 通过synapse.bat启动synapse服务器4. 创建synapse发布的服务器的客户端程序。5. 启动客户端程序,得到结果。先从synapse提供的例子说起吧:官方参考网址:/Synapse_QuickStart.html1. 发布一个Web Services工程。1). 进入下面的目录,编译Web Services源文件userhost:/opt/synapse-1.1.1/samples/axis2Server$ cd src/SimpleStockQuoteService/userhost:/opt/synapse-1.1.1/samples/axis2Server/src/SimpleStockQuoteService$ ant2). 启动Axis2,发布服务Now go to /samples/axis2Server directory and start the server using the following command. This will start Axis2 server on port 9000 (http).Linux / Unix: . axis2server.shWindows: axis2server.bat2. 修改synapse.xml的配置文件,和刚才发布的Web Services服务建立关联。Now its time to start Synapse. In this scenario we are starting Synapse using the sample configuration found in synapse_sample_0.xml (i.e. in repository/conf/sample) and listed below. It is configured to log and pass through, all the messages.3. 启动synapse服务器 (启动synapse_sample_0.xml配置)Go to /bin directory and type the command given below. Synapse will be started on port 8280 (http) and 8243 (https - under JDK 1.5)Linux / Unix: . synapse.sh -sample 0Windows: synapse.bat -sample 04. 创建synapse发布的服务器的客户端程序。例子中客户端程序已经写好了,通过ant编译 及 运行,与下一步一起进行。5. 启动客户端程序,得到结果。Now the final step, running the client. Go to /samples/axis2Client directory and type the following commanduserhost:/opt/synapse-1.1.1/samples/axis2Client$ ant stockquote -Daddurl=http:/localhost:9000/soap/SimpleStockQuoteService -Dtrpurl=http:/localhost:8280 -Dmode=quote -Dsymbol=IBM得到结果为:init:mkdir Created dir: /opt/synapse-1.1.1/samples/axis2Client/target/classescompile:javac Compiling 10 source files to /opt/synapse-1.1.1/samples/axis2Client/target/classesstockquote:javaStandard : Stock price = $91.09641757880443小结一下:以上的过程,就完成了synapse的第一个最简单的应用。因为synapse.xml的文件里,没有配置任何的服务绑定,因此,在启动客户端程序的时候,需要,-Dtrpurl -Daddurl -Dmode -Dsymbol等启动参数,建立client - esb - real ws的连接。下面另一个例子,将通过synapse的代理功能,使配置都在synapse.xml的文件里进行。在这里,我不使用官方提供的例子了。而使用xfire自己写服务端和客户端程序,通过synapse的代理服务进行集成。1. 发布一个Web Services工程。1) 通过MyEclipse写一个Hello的ws。接口文件:IHello.java实现文件:HelloImpl.javaXFire配置文件: services.xmlWeb配置文件:web.xml 接口文件:IHello.javapackage org.conan;/Generated by MyEclipsepublic interface IHello public String sayHello(String name);实现文件:HelloImpl.javapackage org.conan;/Generated by MyEclipsepublic class HelloImpl implements IHello public String sayHello(String name) return Hello +name;XFire配置文件: services.xmlHelloorg.conan.IHelloorg.conan.HelloImpldocumentliteralrequestWeb配置文件:web.xmlXFireServletorg.codehaus.xfire.transport.http.XFireConfigurableServlet0XFireServlet/services/*2) 发布web工程到Tomcat服务器:Tomcat端口8088WS的访问地址为:http:/localhost:8088/HelloESB1/services/Hello?wsdl2. 修改synapse.xml的配置文件,和刚才发布的Web Services服务建立关联。3. 启动synapse服务器Windows: synapse.bat我的SynapseESB启动的port是8020, 打开浏览器,访问:http:/localhost:8020/soap/Hello?wsdl4. 创建synapse发布的服务器的客户端程序。通过MyEclipse,客户端生成工具:使用http:/localhost:8020/soap/Hello?wsdl生成客户端代码因为代码都是生成的,只贴出main()调用代码:public static void main(String args) HelloClient client = new HelloClient();/create a default service endpointHelloPortType service0 = client.getHelloSOAP11port_https();HelloPortType service1 = client.getHelloSOAP11port_http1();String tmp = service1.sayHello(abc);System.out.println(tmp);5. 启动客户端程序,得到结果。“Hello abc”(三) Synapse配置文档介绍例1:从上面的synapse配置文档开始:definitions是synapse配置文件的根元素,它包含了registry、localEntry、sequence、endpoint、proxy和task共六个子元素。l 定义消息中介采用sequence子元素l 定义服务中介采用proxy子元素l 定义注册表采用registry子元素l 定义服务端点采用endpoint子元素l 全局性定义采用localEntry子元素l 任务配置采用task子元素这里采用proxy是指定一个服务代理,名字Hello,target指定了代理的目标,endpoint即是目标端点,其真实地址是http:/localhost:8088/HelloESB1/services/Hello。当想要对从目标服务那里收到的相应做些处理的时候会用到outSequence。这里我们把响应简单的返回给客户端。publishWSDL指定了服务的wsdl地址为http:/localhost:8088/HelloESB1/services/Hello?wsdl。例2:下面是一个采用正则表达式来过滤消息的例子: 这里采用定义了一个消息中介, name=main,是所有消息进入esb的入口,都会经过该通道,Filter元素的source属性给出要求值的属性值,然后是regex属性,用来指定用于从结果中求值的正则表达式,上面配置文件意思是对发往目标

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论