ESB

ESB全称为Enterprise Service Bus,即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。
  ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。从功能上看,ESB提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口。
  ESB的五个基本功能:
  1)服务的MetaData管理:在总线范畴内对服务的注册命名及寻址管理功能。
  2)传输服务: 必须确保通过企业总线互连的业务流程间的消息的正确交付,传输还包括基于内容的路由功能。
  3)中介:提供位置透明性的服务路由和定位服务;多种消息传递形式;支持广泛使用的传输协议。
  4)多种服务集成方式: 如JCA,Web服务,Messaging ,Adaptor等.
  5)服务和事件管理支持: 如服务调用的记录、测量和监控数据;提供事件检测、触发和分布功能;
  ESB的八个扩展功能:
  1)面向服务的元数据管理: 他必须了解被他中介的两端,即服务的请求以及请求者对服务的要求,以及服务的提供者和他所提供的服务的描述;
  2) Mediation :它必须具有某种机制能够完成中介的作用,如协议转换;
  3)通信:服务发布、订阅,响应 请求,同步异步消息,路由和寻址等;
  4) 集成: 遗留系统适配器,服务编排和映射,协议转换,数据变换,企业应用集成中间件的连续等。
  5)服务交互: 服务接口定义,服务实现的置换,服务消息模型,服务目录和发现等。
  6)服务安全: 认证和授权、不可否认和机密性、安全标准的支持等;
  7)服务质量: 事务,服务的可交付性等;
  8)服务等级: 性能、可用性等。
  ESB 中最常提到的两个功能是消息转换和消息路由。
  我认为ESB或SOA,关键有4点:
1.reuse: 服务多了,就要避免重复,能重用的就重用
2.integration: 可重用服务之间会有依赖或者需要整合。才能完成更强大的功能。
3.route: 服务之间怎么整合,信息如何交换。route的过程会有过滤(filter)。
4.transform: 信息也需要转换成不同的格式。
理解ESB应该包含以下内容:

消息服务器:消息接收器、消息队列、消息发送器。。。
Router:路由
mapping:协议转换器
工作流:workflow,或者只是flow
等待。
ESB的全称是 企业 服务 总线。
应用领域是 企业级应用的集成。
关注点是 服务。
特点是 总线。

ESB应该是企业信息系统的基础性设置,各种可复用的资源(file,db,ws,jms,ftp,process,businessmodel等),可以注册到ESB,并在企业内部发布出来。同时,ESB应该易于扩展(协议,服务能力),易管理(提供监控和治理能力,QoS)。

EIP(企业集成模式)中 描述了ESB的动态轮廓:channel+filter:
一个ESB的运行时特征就像是一条流动的河(channel),中间可以走分支或者聚合(Splitter Aggregator),或者改道(router),也许某些地方,还有堤坝和水闸(flowcontrol)。

这个是我理解的ESB
总的来说,可以认为:ESB就是一个大的IOC(DI),spring的DI是object级别的,ESB的DI是service级别的.
ESB是SOA的一部分, SOA包括业务和技术两个方面,而ESB主要还是技术相关的.
webservice和esb的区别哪就是
webservice只是esb可以访问的一种服务提供者(协议)

webservice的方式只是一种大家都熟悉的一个方法,
打个比方,现在需要实现一个服务,客户端发送一个人员编码,返回人员姓名
下面的几种设计方法都可以成为esb(websphere message broker)的服务提供者

A,开发一个webservice,提供调用参数人员编码,返回包含人员姓名soap消息包
B.开发一个socketserver ,接受一个char[20]的 数组,返回char[100]的数组
C.开发一个structs action,通过 someaction.do?usercode=? 的方法返回一个json格式的姓名{name:'edwin'}
D.使用消息队列中间件,发送xml格式的请求消息,再从指定队列读取返回值

现在明白webserice和esb的关系了吧。

1.一般的esb流程是什么样子的?
是不是主系统发生soap请求。esb接收并且转换成jms然后子系统监听jms。最后得到数据。
还是。jms仅仅是内部转换。soap请求在esb转成jms后。加入队列。然后再转成soap调用子系统?
(先是整理需连接的系统,需要连接的系统功能(一般管它叫服务),确定服务的依赖关系,支持的协议(文件,WebService, RPC,...),调用的方式(同步/异步)
然后使用ESB提供的那些协议组件,一点点串起来就行。串的方式可以参考EIP (www.eaipatterns.com)

你说的两种异步方式的话都可以,
如果是同步的,也可以直接soap -> soap, 不用JMS。 一般用JMS是为了实现异步通讯 )
2.使用jms的考虑是jms对队列的信息进行持久化。防止比如子系统突然挂掉了。消息丢失。
但是有个问题。是esb自动监听jms的队列的话。会导致直接消费了。而数据没有存在队列中。还是会出现消息丢失的问题。
这个应该怎么解决。
(JMS,至少我接触的ActiveMQ, 是可以支持事务的,发生异常,可以不消费信息 )

3.esb进行协议之间的转换。每种方式都需要些一个转换方式么?有没有什么通用的。或者是自动转换的。比如soap和jms的互相转换。不是协议切换。是内容转换。
(议转换是为了配合你那些需要整合的系统,如果都是SOAP,也就不需要转了。
消息内容转换(格式,内容),一般ESB都提供各种工具的。 )
1、如果你要做同步转异步,可以在esb上做成ws转jms,然后起到一个缓冲的作用。
最后可以再同步的返回给调用方。
你也可以修改调用方为jms方式,这样就是彻底的异步了,在esb端可以jms转ws,调用业务服务方的ws。
2、esb都支持事务的,jms中如果不确认消息的话,不会从持久存储去delete掉的。
一般的esb。也可以做成是esb消费掉消息,然后存入esb自己内置的jms provider中,这样你再消费的话,也是可靠的。还可以做成补偿机制的,即esb中如何消息处理失败,把消费放回去原来的queue或是一个中间的临时queue,稍后做recover。
3、从esb的不同transport进去的数据,在esb的中介层处理时,其实消息格式都是一致的、通用的。也就是说常见的ws或jms转换在一般的esb里处理都很简单。如果稍微复杂点,也很容易扩展transformer(比如通过xslt做xml格式转换)来实现数据内容和格式的转换。

你可能感兴趣的:(ESB)