目录 一、什么是ESB 二、ESB解决了什么问题以及什么是HSB 三、市面上 ESB产品有哪些?如何选择 四、 如何实现ESB的各个功能 1.ESB的服务接入方式? 2.ESB的如何进行协议转换? 3.数据转换 4. 消息路由 5. 其他功能 五、ESB与微服务的区别
本文主要是对ESB的总结,下面我将从以下几点去理清ESB相关知识点。 什么是ESB ESB解决了什么问题以及什么是HSB ESB产品有哪些?如何选择 如何实现ESB的各个功能 ESB与微服务的区别
一、什么是ESBESB是Enterprise Service Bus的简称,中文翻译为企业服务总线,企业服务总线是一个实现系统间集成和互联互通的重要技术架构,可以理解为是一种消息和服务集成的中间件平台。 二、ESB解决了什么问题以及什么是HSB图片摘自网络,侵删 ESB主要是为了解决多个应用系统互联所面临的的复杂性,减低集成和维护成本。 举个例子,比如我们的医疗业务系统都知道分为很多个系统,包括HIS、LIS、EMR等等,如果这些业务系统是由多个商家做的,可能会有构建语言不同、通信协议不同、数据传输格式不同等问题,那么如何把这些系统用一条线串起来呢?就是用ESB;还有我们医疗从业者、患者、管理人员等可以通过多个渠道访问后台系统,比如浏览器的portal,移动设备等;还有一些特殊的医疗业务应用系统,比如双向会诊、远程会诊、业务协同等等,即实现了ESB的基本特点,又满足医疗卫生行业的特定需求的ESB,叫做健康服务总线(Health Service Bus,HSB)。 ESB为了解决刚才说的问题,就需要保证多个应用系统的服务接入,协议转换,提供可靠的消息传输,数据格式转换,基于内容路由等功能。 有人可能会有疑问,应用A发送消息给ESB,ESB再将消息转换给应用B,那么应用A直接通过SOAP协议发送给B,效率不是应该更高吗?而且如果这些IT系统都在一个网络中,提供的WebService都在统一命名空间下,就可以相互通信,为什么还要加上这一层?有两点需要考虑。第一点。点对点做服务的时候,通常需要考虑日志记录,服务访问安全、传输安全、数据安全、路由分发等一系列问题,而这些完全可以统一管理,统一验证,灵活配置,;如果应用A调用了应用B,在调用了应用C等具有逻辑流程的调用时,还可以在ESB上实现流程引擎;第二点,ESB是一个中间件平台,包含了消息中间件的全部功能,有异步消息处理机制,可以实现业务系统之间真正的松耦合的结构。 三、市面上 ESB产品有哪些?如何选择一.CXF CXF的定位不是ESB总线,而是一个服务框架(Service Framework),主要还是为关于服务的应用提供API上的支持,或者上下文上的管理。可是它的前身之中的一个的Celtix就是IONA公司捐献给开源界的ESB总线,所以总体上还是能提供ESB总线的功能(需依靠与其他的容器)。在CXF中的总线仅仅是起到一个共享资源的提供者的作用。这些贡献资源就相当于JBI规范中的绑定组件(BC)或服务引擎(SE)。即使如此CXF并没有提供了对JBI规范的完整实现。能够说它仅仅是一个相似的JBI容器。CXF支持与除了HTTP之外的其他协议的通信绑定,比如REST、JSON和CORBA等,所以对于Ajax有较强的兼容性。这相对与其他的ESB总线而言能够说是一个较大的优势。可是CXF的ESB总线是根据Spring框架来实现的,由Spring来管理Bus中的各个组件。而Spring对各个Bean或组件的管理是通过一个上下文的配置文件来实现的。这种方式相对与其它的ESB总线(比如根据JMX)的方式而言,则不支持动态的热部署。也就是说CXF不是一个JBI容器,它必须依附与其它的容器来执行。现有的资料来看,CXF眼下能够部署在JBoss和BEA Weblogic中,Tomcatserver因为不支持完整的J2EE规范,特别是基于JCA的EJB,所以对CXF支持的程度不理想。尽管资料中没有涉及到Geronimo,可是以Geronimo对J2EE规范的兼容程度来看,特别是EAR文档的支持,在Geronimo中部署CXF应该没有什么太大的障碍。相同你能够在使用Spring的应用中嵌入CXF,而这仅仅须要在Spring的配置文件里填写对应的配置信息就可以。关于CXF的文档较为丰富,这部分是因为它本身是整合了Xfire和Celtix这两个本身较为成熟的开源项目。另外它较大的依赖于Spring框架,所以假设对Spring较为熟悉的话,在使用上一般就没有太大的障碍了。
二.Open ESB OpenESB是Sun公司提出来的开源ESB项目,所以对JBI规范的支持程度就不用多说了。而GlassFish ESB则是将OpenESB的核心执行环境与GlassFish应用server以及NetBean的集成开发环境整合在一起的有一个ESB项目,当然当中还包括了一些OpenESB中已有的组件(子集)。 在OpenESB中提供了可以支持WS-BPEL2.0的引擎。可是如今这个组件支持WSDL1.1,暂不支持WSDL2.0。并且这个引擎要依托与NetBean集成开发平台,起码仅仅能得到基于NetBean的对应开发包和组件包。可是这个组件对BPEL提供了强大的支持,当中包含支持端点状态的监控、支持多线程运行、业务流程的调试、系统错误的可靠性恢复中各个业务流程实例的数据库持久化以及负载均衡等。在资料方面仅仅有一个演示视频,主要还是基于NetBean平台的使用介绍。其它发布的资料则则较少,特别是API方面差点儿没有。所以假设要对OpenESB进行依照自身的要求进行扩展则较为困难,除非对OpenESB的源码进行全面的分析。
三.ServiceMix ServiceMix是Apache基金会下的一个ESB总线,同一时候也是一个独立的JBI容器(也就是说它支持完整的JBI规范)。说它是一个独立的JBI容器,是由于它拥有自己独立的执行环境,能像应用server一样启动,并支持动态的热部署等,这一点则差别于CXF。 ServiceMix的容器执行环境採用内核的架构,并以Geronimo关于J2EE方面的实现为基础(当然也就支持J2EE的各方面规范,比如安全性方面的JAAS等),所以在性能上还是较为出色的。在通信上,整合了ActiveMQ,也支持多种的通信协议,比如HTTP和JMS。同一时候在管理组件上採用了JMX的管理架构,从而可以对部署在总线上的各种组件进行动态的配置和管理,或通过Web的形式,或通过JMX远程訪问均可。ServiceMix内核可以整合到所处的操作系统中,从而作为OS的对外提供的服务。差别与其它总线的是,ServiceMix还提供了自己的脚本命令控制台,并通过一些简单命令来管理应用组件以及ServiceMix内核实例。 关于ServiceMix的资料也较为的完备,当中当然也包含一些简单的小样例。关于组件扩展方面和流程引擎整合方面的具体资料则不够具体。假设要做进一步的总线上的扩展,则须要对源码和样例进行较为深入的学习和研究,当然这一切的基础是对JBI的规范有较为全面的了解。
四.JBoss ESB JBoss ESB是JBoss社区为面向SOA而提出的一个EAI系统平台。它提供了非常多EAI本身所应具有的功能,比如业务流程监控、集成开发环境、工作流用户接口、业务流程管理、分布式计算架构以及作为应用容器的功能等。能够说JBossESB在功能上是较为强大的。但相对于上面的总线而言,它的技术架构方案是最独立的。由于它除了支持J2EE标准外,对于JBI规范压根就不沾边。当然也就不存在JBI规范中的规范化消息路由、服务引擎和绑定组件了。JBossESB除了支持 Web Service外,还支持多种的远程调用协议,比如JMS。仅仅是相对于ServiceMix和CXF而言,假设要对JBossESB进行扩展,可能要花费较大的时间和精力。 JBossESB相对上述的开源项目而言,一个非常大的优势在于文档资料是最为丰富和完备的。所以在开发和扩展上减小了不小的阻力。它而且依托于成熟的JBoss社区,周围齐全的开源项目支持,为后期的平台扩展提供了丰富的选择空间。
四、 如何实现ESB的各个功能1.ESB的服务接入方式?RPC 远程过程调用(面向方法) SOAP 面向服务的架构(面向消息) REST 资源的状态转变(面向资源) 目前我们公司使用的HSF实际上就是RPC,还是JSON-RPC,RPC的另一种实现还有XML-RPC,通讯方式相同,采用调用本地服务(方法)一样的调用服务器的服务(方式)的方式,只不过传输数据格式不同,JSON格式更加高效。 XML-RPC实际上就是这三种方式的最早通信方式,基于HTTP传输协议+XML参数封装,一个XML-RPC消息就是一个请求体为xml的htpp-post的请求,服务端执行了之后也以XML格式的编码返回,后来这个标准演化成了SOAP,可以理解为SOAP是XML-RPC 的高级版本; SOAP,简单对象访问协议,是一种轻量的、简单的、基于xml的远程访问协议,可以实现多种传输层或应用层协议结合使用,如TCP/HTTP/SMTP等,实际上应用最广泛的还是基于HTTP+XML的实现,相对于XML-RPC,SOAP更好的利用了XML,有相应的服务描述语言,也是一段XML,也就是WSDL(Web Services Description Language),专门用来描述怎么访问web服务,描述了哪些细节呢?一般包含4点,用于访问服务的地址信息,用于传输信息的传输协议(比如通道数),用于所有可使用功能的名称和接口方法,在所有的请求和响应中所使用的数据类型,具体什么格式,这里不再展开,有兴趣可以查看一下以下链接: WebService之WSDL文件讲解 最后说REST,非协议非规范,只是一种约束、概念或者开发方式,简单的说就是,用HTTP动词(GET,POST,DELETE,DETC)描述操作,表示资源的转换。满足REST的约束叫RESTful结构,其实目前公司的并不是RESTful风格。 近年来的REST被炒得很火,但不是所有情况都是适合的,REST目前都是基于HTTP/HTTPS,而SOAP可以支持很多传输协议,从HTTP/HTTPS到SMTP(Simple Mail Transfer Protocol,简单邮件传送协议),甚至JMS(Java Messaging Service,Java消息传递服务)。而SOAP已经是一个工业标准,它具备良好定义的协议,以及一套良好确立的规则,在大型和小型系统中均有采用。
2.ESB的如何进行协议转换?现在使用的ESB协议转换基本上使用的ESB产品,实现基本上二进制进行转换;具体的可以找相应的产品的,比如 WSO2d产品的实现: WSO2 ——(7)ESB功能:协议转换 目前有一些问题需要再调查一下,cxf3.1目前也只支持wsdl1.1,axis2的最新版也不支持wsdl2.0,需要继续查询资料如何转换;有些企业再做接口对接的时候可能只提供wsdl,需要自己根据wsdl生成服务端提供服务给他们,可以利用soapUI实现。有些企业只支持wsdl1.0,我们要实现自己的ESB就要提供wsdl1.0与wsdl2.0版。 3.数据转换4. 消息路由5. 其他功能ESB当然还有其他功能,这里不再介绍,基本上各个ESB工具已经封装好,可根据ESB工具自己拓展和调用。这里给出其他功能介绍的链接 java系统间通信ESB。 五、ESB与微服务的区别见我另一篇文章:企业服务总线 与 注册服务管理
|