ESB 提供了交互点,服务可以在此将消息放到总线上或从总线取走。它会对动态消息应用中介,并保证这些托管交互的 QoS。
从 ESB 的角度来看,所有的服务交互端点都是类似的,因为它们都发送或处理请求/事件;它们都要求特定的 QoS;它们可能都需要交互协助。ESB 模式允许集成开发人员以与处理新业务逻辑、流程编排组件或外部 Web 服务同样(面向服务)的方式对待与用户交互的请求者或提供者。
用于构建基于 ESB 的解决方案的模式分为以下几类:
交互模式:允许服务交互点将消息发送到总线或从总线接收消息。
中介模式:允许对消息交换进行操作。
部署模式:支持将解决方案部署到联合基础设施中。
交互模式
ESB 允许端点通过总线以其本机交互模式进行交互。它支持各种端点协议和交互方式。交互模式的例子包括:
请求/响应:处理端点间的请求/响应方式的交互。此 ESB 基于消息传递模型,因此由两个相关的单向消息流对请求/响应交互进行处理,一个用于请求,一个用于响应。
请求/多响应:上述类型的变体,可以发送多个响应。
事件传播:事件可以匿名分发到由 ESB 管理的相关方列表。服务可以将自身添加到该列表中。

图 4: 交互模式
中介模式
中介模式处理总线上的动态消息(请求或事件)。由请求者发出的消息会转换为稍微有些不兼容的提供者(从潜在的端点集中选择)能够理解的消息。
这些中介操作单向消息而不是请求/响应对,因为 ESB 将交互模式放在中介模式上。

图 5: 中介模式
中介有多种基本模式;更为复杂的模式可以通过组合简单模式构建:
协议变换:允许服务请求者使用各种交互协议或 API(如 SOAP/HTTP、JMS 和 MQ Integrator——MQI)发送其消息。将请求代码转换为目标服务提供者的格式。可以应用到交互的请求者端或提供者端,或同时应用到两端或两者之间的任何位置。
转换:将消息的有效负载(内容)从请求者的模式转换为提供者的模式。可以包含包封、反包封或加密。
充实:通过添加来自外部数据源的信息(如由中介定义的自定义参数或者来自数据库查询的自定义参数)来增加消息的有效负载。
路由:更改消息的路由,可从支持请求者的意图的服务提供者中选择。选择标准中可以包含消息内容和上下文、以及目标服务提供者的功能。
分发:将消息分发到一组相关方,通常由订阅者的相关概要驱动。
监视:在信息通过中介时观测其是否发生改变。可以用于监视服务水平;帮助确定问题或对用户进行后续支付使用的货币单位;或记录企业级事件(如价值超过一定数额的购买行为)。还可以用于将消息记入日志,以供审核和后续数据挖掘之用。
相关:从消息或事件流中派生复杂事件。包括模式标识规则和响应模式发现的规则(例如,通过生成派生自触发事件流的内容的复杂事件)。
可以在解决方案中显式地配置中介。例如,集成开发人员可以配置一个 enrich 中介来修改消息内容。解决方案管理员可以配置一个 route 中介来允许其将某个服务提供者切换到脱机状态。
其他中介由 ESB 设置,以满足服务请求者和服务提供者的 QoS 要求。例如,如果服务提供者的安全策略声明要求使用加密消息,则 ESB 可以自动配置一个 encryption 中介。
策略同样也是服务的属性,解决方案管理员可以为交互(或交互集)设置策略。例如,为了将要发送到特定外部提供者或交易值超过 1 百万美元的所有消息记录到日志中。ESB 将通过配置中介(在本例中为monitor 中介)来实现策略。
复杂模式

图 6: 复杂模式
中介模式和交互模式可以进行组合,以实现更为复杂的模式。
例如,在协议变换后转换格式可以实现规范化适配器 模式,在这种模式中,所有相关方使用的消息和业务对象集都标准化为规范的格式。规范化适配器模式将端点的本机总线附加协议转换为标准协议,实现有效负载规范化,并在交付时进行这些转换的反向转换。
另一种常见的复杂中介是转换、记录和路由 模式。
网关 模式是一个复杂的协议变换变体。它可以合并转换和监视中介,以提供加密、日志记录或审核等功能。它还可以对一对多关系中的消息进行聚合和反聚合。服务门户是此类模式的代表,它为多个服务提供单一联系点,并隐藏内部服务的细节。
部署模式
解决方案管理可以选择多种 ESB 拓扑。下面是一些常见的例子:
全局 ESB:所有服务共享一个名称空间,每个服务提供者对环境(异构、集中管理但分布在多个地理位置)中所有服务请求者均可见。供部门或小型企业使用,其中,所有服务都可能在整个组织中应用。
直接连接的 ESB:公共服务注册中心使几个独立的 ESB 安装中的所有服务均可见。用于由业务部门提供和管理服务但整个企业中均可使用这些服务的场合。
代理 ESB:桥接服务有选择地将请求者或提供者公开给其他域中的合作伙伴,从而控制多个 ESB 安装(每个安装都管理自己的名称空间)间的共享。ESB 间的服务交互通过实现桥接服务的公共代理进行。供各个部门使用,这些部门开发和管理自己的服务,但共享其中部分服务或者有选择地访问企业提供的服务。
联合 ESB:将多个依赖 ESB 联合到其中的主 ESB。服务使用者和提供者连接到主 ESB 或某个依赖 ESB,以访问整个网络中的服务。供希望在一个监管部门的保护下联合有适度自治权的部门的组织使用。

图 7:ESB 部署模式
结束语
ESB 模式扩展了 SOA 的虚拟化功能。可以由标准功能单元组成中介,然后进行部署,以帮助不匹配的请求者和提供者进行交互。ESB 还提供了用于部署和管理服务的通用模型。ESB 概念允许根据用户角色单独进行考虑,从而减少了单个工作人员的概念上的负担,并改进了体系结构的可用性。ESB 的综合编程模型、组件化工具以及基础设施极大地支持了 SOA 原则的提前实现。