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

一、ESB的五个基本功能: 

    1)服务的MetaData管理:在总线范畴内对服务的注册命名及寻址进行管理。
 

  2)传输服务:确保通过企业总线互连的业务流程间的消息的正确交付,还包括基于内容的路由功能。
 

  3)中介:提供位置透明的路由和定位服务;提供多种消息传递形式;支持广泛使用的传输协议。
 

  4)多服务集成方式: 如JCA,Web服务,Messaging ,Adaptor等.
 

  5)服务和事件管理支持: 调用服务的记录、测量和监控数据;提供事件检测、触发和分布功能;

二、ESB 原理

Channels — Messaging应用通过一个Message Channel传送数据,一个sender到receiver的虚拟管道。一个新安装的消息系统默认不包含任何channel;你必须知道你的应用需要怎样通讯,然后才能建立channel来完成它。

Messages — Message是在channel上传输的不可分割的包。因此,为了传输数据,应用必须将数据打包成一个或多个packets,将每个packet包装成一个message,然后将其传输到一个channel。同样的,一个receiver应用在接受到message后必须从message中提取出数据才能使用。Message系统应该能重复的传输message,直到它成功为止。

Pipes and Filters — 最简单的情况下,message系统将一个消息直接从sender计算机传送到receiver计算机。然而,通常在消息从sender中发出后,receiver接受到之前,有一些动作需要对message执行。举例来说,message也许需要验证或者转换。Pipes and Filters架构使用channel将多个处理步骤连接起来。


Routing — 在一个大型的、拥有许多不同的应用和channel连接的企业应用中,一个message可能需要穿过多个channel才能到达最终目的地。Message的路由如此复杂以至于最初的发送者无法知道那些channel能将message传送给最终的receiver。因此,最初的发送者将message发送给一个Message Router,一个以Pipes and Filters架构中的filter形式存在的应用组件。Router将决定如何将message发送到最终receiver或者至少是下一个Router。 

Transformation — 不同的应用的数据格式可能不同。为了调节sender和receiver之间的数据格式不同的问题,message必须经过一个中介的filter,一个Message Translator,它将message从一个格式转换成另外一个格式,或转换成一个公共的格式。

Endpoints — 大多数的应用程序没有内建的能力来同一个message系统交互。因此他们必须包含一个中间层,它知道应用系统如何工作,也知道message系统如何工作,并桥接两个系统。这个系统是一组并列的Message Endpoints,它能够使得应用发送和接受message。

System manager - 作为一个大型的消息集成系统,其面向消息的、异步、低耦合的本质使得系统更加难以调试,运行期的状态也难以跟踪,所以,我们必须有强有力的手段进行系统的运行期管理和监控,同时最好能够在运行进行动态更新,以保障系统的强壮性。

企业应用集成是一个巨大而复杂的系统,作为其基础件ESB系统,必须能够提供对其完全的支撑以及足够强壮的系统,这正是ESB系统建设的难度所在。
 

三、以贵公司集成系统为例,配置ESB服务

1、启动命令:(用命令行启)
Linux / Unix: . synapse.sh -sample 0
Windows: synapse.bat -sample 0
(sample 0代表synapse-2.1.0\repository\conf\sample中的XML配置,作用不同,其中synapse_sample_58.xml代表负载均衡)
2、修改ESB启动端口
synapse-2.1.0\repository\conf\axis2.xml中查找
transportReceiver name="http" class="org.apache.synapse.transport.nhttp.HttpCoreNIOListener"> <parameter

name="port">8280</parameter> <parameter name="non-blocking">true</parameter>,修改其中的PORT值
3、修改负载均衡对应的应用地址:
synapse-2.1.0\repository\conf\sample\synapse_sample_58.xml中

  <loadbalance failover="true">
                        <member hostName="127.0.0.1" httpPort="7000"/>
        <member hostName="127.0.0.1" httpPort="9001"/>
       
                    </loadbalance>
每一个MEMBER代表一个地址,需要几个应用进行负载,就添加几个MEMBER地址

4. 如果运行本系统修改:<messageFormatter contentType="text/xml"
                         class="org.apache.synapse.format.hessian.HessianMessageFormatter"/>

5.如果启动多个服务时需要改:# Default is to autodetect free port starting at 1099; change it to meet your deployment requirements!
synapse.jmx.jndiPort=1199

6、命令行下启动服务
   >d:  回车 --切换到d盘
   d...>dir  --显示所有文件
   d...>cd 按tab键选择所要文件 回车 --切换到所选文件夹下
   d...>cd 按tab键选择所要文件 回车 --进入所选文件夹下
   d...>cd bin
   d...>