ESB与SOAP的关系

请教:ESB与SOAP的关系?

最近在学一些SOA相关的知识,有一些迷惑的地方,遂来求教。

先说说我的理解:
ESB是一种组件与组件之间进行消息传递的载体。它类似于计算机中的总线,通过总线将各种硬件连接到一起。那么,因为Web Service是跨平台的,所以ESB可以将企业的所有IT系统连接到一起,然后进行消息交互。而组件之间可能会使用SOAP协议来通信(目前还有一种REST也比较流行)。按照这样来理解的话,ESB应该是一种技术框架,而SOAP是组件Web service的一种消息通信实现方式。

我理解的ESB应该是这样工作,应用A发送消息给ESB,ESB然后再将消息转发给应用B。那为什么应用A直接通过SOAP发送给B呢?这样效率不是更高么?另外,企业的IT系统如果都是在一个网络中,而且它们所提供的Web Service使用的SOAP都是同一命名空间下,就可以相互通信,为什么要加这么一层呢?

我的猜测:ESB是一种中间件,它可以管理消息然后进行一些加工处理,同时也可以做一些统计工作。请教各位在企业中实施过SOA的前辈们给晚辈指点迷津。

感谢。
关注者
96
被浏览
13442
5 个回答

谢邀!

问题1:

ESB是一种组件与组件之间进行消息传递的载体。它类似于计算机中的总线,通过总线将各种硬件连接到一起。那么,因为Web Service是跨平台的,所以ESB可以将企业的所有IT系统连接到一起,然后进行消息交互。而组件之间可能会使用SOAP协议来通信(目前还有一种REST也比较流行)。按照这样来理解的话,ESB应该是一种技术框架,而SOAP是组件Web service的一种消息通信实现方式。

这个理解基本正确,但是ESB不是技术框架,是一种消息和服务集成的中间件平台。SOAP只是一种可以接入和适配到ESB的通信协议,其它包括Rest, JMS, FTP, socket,MQ等都可以接入和适配到ESB。参考如下Jboss ESB的一个图。

ESB有输入的消息,有输出的消息,协议和格式都还可能不同,因此ESB的核心能力会包括了消息集成,协议转换,路由,消息映射转换等。

问题2:

我理解的ESB应该是这样工作,应用A发送消息给ESB,ESB然后再将消息转发给应用B。那为什么应用A直接通过SOAP发送给B呢?这样效率不是更高么?另外,企业的IT系统如果都是在一个网络中,而且它们所提供的Web Service使用的SOAP都是同一命名空间下,就可以相互通信,为什么要加这么一层呢?

对于这个问题主要分几方面阐述:

其一,原来点对点做服务的时候,往往每个服务都需要考虑日志记录,服务审计,服务的访问安全,传输安全和数据安全,服务的路由分发等一系列问题。而这些内容本质是可复用的,在ESB总线中可以统一接管,并通过灵活可配置的模式进行设置。既统一的SOA服务管控和治理的标准,也减轻了原生服务的设计开发工作量。

其二,ESB含了消息中间件的全部功能,正是有了异步消息处理机制后,可以实现业务系统间真正的松耦合架构,如果ESB平台全部集成的是同步服务,则很难算得上完整意义上的松耦合架构。这个是ESB总线另外一个强大的功能,但是我们在进行服务识别和服务设计的时候往往忽略。

最后,在复用层面,如果仅仅将SOA或ESB理解为一个集成平台,那么SOA平台本身的价值将大打折扣。SOA的核心思想一直在强调就是要找到可以复用的服务,这些服务满足离散,松耦合,无状态,粗粒度等特点,同时这些服务可以组装和编排,灵活满足业务变更的需要。

ESB:
ESB全称为Enterprise Service Bus,即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。从功能上看,ESB提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口。


SOAP:
SOAP (Simple Object Access Protocol) 顾名思义,是一个严格定义的信息交换协议,用于在Web Service中把远程调用和返回封装成机器可读的格式化数据。事实上SOAP数据使用XML数据格式,定义了一整套复杂的标签,以描述调用的远程过程、参数、返回值和出错信息等等。而且随着需要的增长,又不得增加协议以支持安全性,这使SOAP变得异常庞大,背离了简单的初衷。另一方面,各个服务器都可以基于这个协议推出自己的API,即使它们提供的服务及其相似,定义的API也不尽相同,这又导致了WSDL的诞生。WSDL (Web Service Description Language) 也遵循XML格式,用来描述哪个服务器提供什么服务,怎样找到它,以及该服务使用怎样的接口规范,简言之,服务发现。现在,使用Web Service的过程变成,获得该服务的WSDL描述,根据WSDL构造一条格式化的SOAP请求发送给服务器,然后接收一条同样SOAP格式的应答,最后根据先前的WSDL解码数据。绝大多数情况下,请求和应答使用HTTP协议传输,那么发送请求就使用HTTP的POST方法。

ESB里面可以有SOAP,SOAP是ESB实现数据交换和传输的一种协议之一.
ESB就是中间件,它是一种体系架构,包含各种组件,通过ESB可以打通各个异构系统的信息孤岛,实现异构系统的互联互通;可以识别不同的数据源,实现信息的共享。应用A发送消息到应用B,由于A和B可能是异构系统,所以通过ESB可以将A发送的消息转换成B识别的消息发送给B。当然,如果只是一条消息没必要用ESB,直接用SOAP就可以了,但是多个异构系统的通信存在很多的消息通信,这就涉及到服务转换、协议转换、消息路由、同步异步的业务,通过ESB就能很好的解决这些问题。如果直接用SOAP调用的话会把本来就很复杂的系统变得更加复杂,也会大大增加开发成本。这是我见解,仅供参考。

企业中各外围系统之间通信的报文格式不一定相同。如果有ABCDE....Z个子系统之间相互通信的话,那么可能需要做笛卡尔积种消息转换方式。而有ESB系统消息路由的话,仅需实现到ESB间标准消息转换即可。

ESB在安全策略上也是很重要的。可以实现身份识别、认证、校验、防抵赖等等。可以真正的实现与业务的解耦,从而实现更清晰的逻辑。

至于ESB和SOA之间浆糊一样的关系,我感觉能说的很多,但说错的可能性也非常大,所以就不说了。

总之ESB主要做了三件事:第一,消息转换。第二消息路由。第三,.... 如果说还有一点别的,那就是加解密,这个对安全性是很重要的。但是这都是次要,主要就是这三件事。很惭愧,就做了A trivial thing,谢谢大家。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java ESB (Enterprise Service Bus) 是一种基于Java的企业级服务总线,用于构建和管理不同系统间的集成和通信。它提供了一种解决方案,可以将各个应用程序和服务连接起来,促进系统间的数据交换和协同工作。 一个Java ESB的例子是一个电子商务平台的后端系统。该平台包含了不同的子系统,如订单管理、库存管理、物流管理等。每个子系统有自己的数据库和业务逻辑。当一个用户下单时,Java ESB可以负责将订单信息从订单管理子系统传递到库存管理子系统,并实时更新库存信息。同时,Java ESB可以将订单信息发送给物流管理子系统,以便安排货物的配送。这样,不同的子系统之间就能够实现高效的数据共享和协同工作。 Java ESB还可以处理不同系统之间的协议转换。例如,如果某个子系统使用SOAP协议进行数据交换,而另一个子系统使用RESTful API进行数据交换,Java ESB可以负责将两种不同的协议进行转换,使得两个子系统能够无缝地进行数据交换。 此外,Java ESB还提供了高可用性和可扩展性的特性。通过实现负载均衡和故障转移功能,Java ESB可以确保系统的稳定性和可靠性。它还支持水平扩展,可以根据业务的需求进行系统的横向扩展,提高系统的处理能力。 总的来说,Java ESB是一个强大的工具,可以帮助企业构建可靠和高效的系统集成解决方案。它通过提供统一的消息传递机制、协议转换能力和可扩展性,实现了不同系统之间的无缝集成和协同工作。在现代企业中,Java ESB已经成为一个重要的技术组件,为企业的业务流程和信息传递提供了可靠的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值