现在的位置: 首页 > 综合 > 正文

从SOA到ESB,再到JBI

2018年08月09日 ⁄ 综合 ⁄ 共 1912字 ⁄ 字号 评论关闭
 

找了些资料,整理下自己的思路:
SOA的概念是把当前的信息系统功能看作是可以以松耦合方式访问、与技术平台无关的“服务”,而把应用程序看作对服务请求的编排方式。这就是为什么SOA通常都有工作流或流程编排概念的原因。
企业服务总线(ESB)是SOA的实现途径之一。它是连接各种不同服务并对其进行编排的中间件。根据这些概念,JBI规范(Java Specification Request 208)定义了一个标准的集成框架。
ESB全称为Enterprise Service Bus,即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。
JBI(Java Business Integration,Java业务集成)规范定义了安装集成组件的标准方法。其目的是创建一个可以在企业信息系统中实现SOA的集成方案。这些组件以插件的形式安装到JBI环境中,并通过JBI环境以松耦合的方式提供或使用服务。而JBI环境则负责这些组件之间的通信。
 
有两种组件可以插入JBI环境:
* 服务引擎(Service engine):提供服务逻辑,比如可扩展样式表转换语言(XSLT)或业务流程执行语言编排(BPEL)。
* 绑定组件(Binding component):是连接外部服务或应用程序的“连接器”。它们可以与各种协议进行通信,比如SOAP、Java消息服务(JMS)、远程方法调用(RMI)或者ebXML。
  这些可配置的组件使异构服务之间的通信成为可能。JBI规范引入服务装配器(service assembly)概念,定义了这些组件的配置方案与互相之间的关系。这些组件(引擎或绑定)的作用就是暴露外部与内部的服务。所有JBI环境中暴露的服务都可以通过服务终端和服务地址进行访问。
  组件之间交换信息称为信息交换。交换模式是一种发送/接收的模式。
服务装配器(service assembly)描述如何配置一个JBI组件使其能集成到应用中。它以一个简单的zip压缩包方式部署在JBI容器中。(手头正在使用的glassFish中就有个JBI Container,对于其他应用服务器还不是很了解)容器分析压缩包中的所有内容,并根据这些内容配置相关的组件。组件的配置即是一个服务单位(service unit)。当我们使用服务单位来配置一个组件时,我们称之为部署一个配置(artifact)。请注意,服务单位的内容对容器来说是不透明的,它只提供给组件。
  如果服务装配器包含对服务之间关系的定义(即连接,connections),容器就会创建这些连接。可以视连接为真正的服务终端别名。
服务装配器是一个zip压缩包,它包含XML描述符文件,定义向哪个组件提供服务单位以及服务之间的连接。服务装配器还包含要向各个组件部署的服务单位。这些服务单位也是zip压缩包。(参考图:http://i3.sinaimg.cn/IT/s/2008-09-26/0e592d69d6ce77fe7d0d82593d328850.jpg
简单地说,服务装配器的作用就是定义一系列服务之间的关系,从而以SOA的方式创建应用。如果容器中有多个服务装配器,那么这些服务装配器应该可以在同样的服务上运行,并共享这些服务。
     服务单位(service unit)是一系列部署到JBI组件中的元素。它包含一个组件能够读取的XML描述符,以及任何组件可以获取的配置。ESB将服务单位包放在一个目录里,然后告诉组件的服务单位管理器(JBI组件的一部分)有新的服务单位可以调用,并指出存放服务单位的目录位置。组件的服务单位管理器把新服务注册到JBI环境中,然后配置组件以使用已注册的服务终端。
     连接器(connections)是在服务配置器的描述符里定义的,可以视其为真正的服务终端的别名。比如,一个组件可以描述“我要向一个称作My Endpoint的服务终端发送一条消息”,连接器就可以认为My Endpoint实际上就是My Real Endpoint。这样,当组件向My Endpoint发送消息时,消息就会被发送到My Real Endpoint。
  使用这样一种机制的意义在于,可以动态地对组件之间的连接进行重新配置。比如,配置一个组件——旅行社的工作流程引擎——来调用叫做“航空服务终端”的服务。后来,由于旅行社与航空公司合作关系的变化,连接器要把航空服务终端连接到“低消费的航空公司终端”或“另一个航空公司终端”。服务使用者不需要做出任何变更,通过部署包含不同连接器的各种服务配置器,应用就会动态地更改所使用的服务。
 
 
 
 
 
 
 

抱歉!评论已关闭.