关于ESB(企业服务总线)

摘要:
ESB为了解决刚才说的问题,就需要保证多个应用系统的服务接入,协议转换,提供可靠的消息传输,数据格式转换,基于内容路由等功能。三.如何实现ESB的各个功能1、ESB的服务接入方式?

一.什么是ESB

ESB是Enterprise Service Bus的简称,中文翻译为企业服务总线,企业服务总线是一个实现系统间集成和互联互通的重要技术架构,可以理解为是一种消息和服务集成的中间件平台。

二.ESB解决了什么问题以及什么是HSB

关于ESB(企业服务总线)第1张

ESB主要是为了解决多个应用系统互联所面临的的复杂性,减低集成和维护成本。

举个例子,比如我们的医疗业务系统都知道分为很多个系统,包括HIS、LIS、EMR等等。

如果这些业务系统是由多个商家做的,可能会有构建语言不同、通信协议不同、数据传输格式不同等问题,那么如何把这些系统用一条线串起来呢?就是用ESB;

还有我们医疗从业者、患者、管理人员等可以通过多个渠道访问后台系统,比如浏览器的portal,移动设备等;

还有一些特殊的医疗业务应用系统,比如双向会诊、远程会诊、业务协同等等,即实现了ESB的基本特点,又满足医疗卫生行业的特定需求的ESB,叫做健康服务总线(Health Service Bus,HSB)。

ESB为了解决刚才说的问题,就需要保证多个应用系统的服务接入,协议转换,提供可靠的消息传输,数据格式转换,基于内容路由等功能。

有人可能会有疑问,应用A发送消息给ESB,ESB再将消息转换给应用B,那么应用A直接通过SOAP协议发送给B,效率不是应该更高吗?

而且如果这些IT系统都在一个网络中,提供的WebService都在统一命名空间下,就可以相互通信,为什么还要加上这一层?有两点需要考虑。

(1)点对点做服务的时候,通常需要考虑日志记录,服务访问安全、传输安全、数据安全、路由分发等一系列问题,而这些完全可以统一管理,统一验证,灵活配置;

如果应用A调用了应用B,在调用了应用C等具有逻辑流程的调用时,还可以在ESB上实现流程引擎;

(2)ESB是一个中间件平台,包含了消息中间件的全部功能,有异步消息处理机制,可以实现业务系统之间真正的松耦合的结构。

三.如何实现ESB的各个功能

1、ESB的服务接入方式?

(1)RPC 远程过程调用(面向方法)

目前公司使用的HSF实际上就是RPC,还是JSON-RPC,RPC的另一种实现还有XML-RPC,通讯方式相同,采

用调用本地服务(方法)一样的调用服务器的服务(方式)的方式,只不过传输数据格式不同,JSON格式更加高效。

XML-RPC实际上就是这三种方式的最早通信方式,基于HTTP传输协议+XML参数封装,一个XML-RPC消息就是一个请求体为xml的htpp-post的请求,

服务端执行了之后也以XML格式的编码返回,后来这个标准演化成了SOAP,可以理解为SOAP是XML-RPC 的高级版本;

(2)SOAP 面向服务的架构(面向消息)

SOAP,简单对象访问协议,是一种轻量的、简单的、基于xml的远程访问协议,可以实现多种传输层或应用层协议结合使用,

如TCP/HTTP/SMTP等,实际上应用最广泛的还是基于HTTP+XML的实现,相对于XML-RPC,SOAP更好的利用了XML,

有相应的服务描述语言,也是一段XML,也就是WSDL(Web Services Description Language),专门用来描述怎么访问web服务,描述了哪些细节呢?

一般包含4点,用于访问服务的地址信息,用于传输信息的传输协议(比如通道数),用于所有可使用功能的名称和接口方法,

在所有的请求和响应中所使用的数据类型,具体什么格式,这里不再展开。

(3)REST 资源的状态转变(面向资源)

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、数据转换

(1)在应用间交换不同格式的信息;

(2)操作消息的负载内容,包括加密、压缩和编码转换;

(3)在异构的传输协议的数据类型间格式化消息;

此过程也是依赖工具比如Mule可以用Transformer 进行转换,比如将JMS格式message转化为其他类型的数据,JDBC Transformer可以将CSV或xml文件中的数据转移到数据库中等等操作。

4、消息路由

(1)基于消息内容和复杂规则路由消息;

(2)消息的过滤、聚合以及重新排列序号;

此过程也是依赖工具比如Mule可以用case when 等逻辑判断,根据消息中指定的消息将消息发送到不同的服务端进行处理。

5、ESB总线和微服务通信区别

ESB的主要应用场景是集成,特别是对无法改变的异构系统做适配整合,比如遗留系统,外部系统。

在逻辑上和运行时都是集中的。逻辑上会有集中的高层视野,有利于可管理性,也就是便于治理。

但也有集中的复杂性特别是演进时的节奏纠缠,需要想办法应对。运行时的集中则有比较大的容量和可用性风险。

微服务的通讯一般是自治的,在运行时是分散的,容量和可用性风险可以分散应对。逻辑上也是分散的,这一点有好处也有坏处,分散复杂性的同时也失去了统一视野。

折中的办法是建立服务治理中心,作为逻辑中心,采用事后模式的治理演进风格。

免责声明:文章转载自《关于ESB(企业服务总线)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android系统修改硬件设备访问权限RSA加密与解密下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android Looper详解

在Android下面也有多线程的概念,在C/C++中,子线程可以是一个函数, 一般都是一个带有循环的函数,来处理某些数据,优先线程只是一个复杂的运算过程,所以可能不需要while循环,运算完成,函数结束,线程就销毁。对于那 些需要控制的线程,一般我们都是和互斥锁相互关联,从而来控制线程的进度,一般我们创建子线程,一种线程是很常见的,那就是带有消息循环的线程...

Kafka创建SSL证书

对于消息组件,如果按照最初的设计来讲,性能最高得就是RabbitMQ,因为RabbitMQ设计比较完整,而Kafka不同,Kafka最初的设计最大的坑:没有安全认证,所以最初的一些系统设计的时候为了考虑到安全性,所以采用了性能较差的ssl认证方式来进行出来,也就是说使用证书的方式来处理认证操作。 如果要想进行证书的ssl处理,那么肯定需要通过java中的...

小米公布2017二季度手机出货量:环比增长70%

新浪手机讯 7月7日下午消息,刚刚小米公司创始人雷军公布2017年第二季度手机出货量。根据数据显示,第二季度小米手机出货量2316万台,环比增长70%,创造了该品牌季度手机出货量的新纪录。   这一消息源自雷军在手机业务誓师大会上的发言。事实上此前就有相关业内人士给出过类似的推测,在6月中旬有消息称:小米二季度出货量会达到2300万台,预计三季度的出货量在2...

flutter SnackBar 底部消息提示

具有可选操作的轻量级消息提示,在屏幕的底部显示 文档:https://api.flutter.dev/flutter/material/SnackBar-class.html demo: import 'package:flutter/material.dart'; class SnackBarDemo extendsStatefulWidget {...

C# 消息处理机制及自定义过滤方式

一、消息概述 Windows 下应用程序的执行是通过消息驱动的。消息是整个应用程序的工作引擎,我们需要理解掌握我们使用的编程语言是如何封装消息的原理。 1. 什么是消息(Message) 消息就是通知和命令。在.NET框架类库中的System.Windows.Forms命名空间中微软采用面对对象的方式重新定义了Message。新的消息(Message)结构...

ObjectiveC中一种消息处理方法performSelector: withObject:

摘要: Objective-C中调用函数的方法是消息传递,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候传递人和消息。首先介绍两个方法。 Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消...