
公共用法模式
简单服务代理模式
简单服务代理模式用于在服务请求者与服务提供者之间创建一对一映射。 通过在两个服务之间布置 ESB,可以隐藏服务提供者的实际位置。 简单服务代理模式在提供访问控制点、请求跟踪或审计方面也特别有价值。
- 要通过控制点提供对服务的访问,但不向客户端公开该服务的实际位置(端点地址)。
- 每次访问服务时都必须应用某种形式的控制(访问管理、授权、审计或日志记录)。
图 1 显示了简单服务代理模式。 通过部署实现了同一接口的 ESB 调解隐藏了目标服务。 此调解充当虚拟服务(即代理),它将所有请求重定向到实际服务提供者。
服务注册表是一个数据存储库,用于描述一组服务及其相关联的属性和行为。 此注册表可供 ESB 查询以确定服务提供者的端点。

例如,由于法律要求,经常需要对银行应用程序中的操作进行审计。 简单服务代理模式可用来实现此业务需求, 此需求将确保审计所有请求,并因此不再需要服务提供者来实现此功能。
服务选择器模式
服务选择器模式提供同一个服务接口的多个实现,这些实现将分组到一起并具有单一端点地址。 每个实现都可以具有不同的服务质量或行为,并且每个客户机请求都可以与不同条件(例如进入 ESB 的消息的内容)所确定的特定实现相匹配。
- 特定服务有多个实现,并且所有实现共享同一个接口。
- 不同实现提供了不同的服务质量。
- 来自不同客户机的请求将根据同一组预定义条件路由到特定实现。
图 2 显示了服务选择器模式,该模式实现了根据每个客户机请求的上下文或内容选择特定端点地址所需的逻辑。
服务注册表是一个数据存储库,用于描述一组服务及其相关联的属性和行为。 此注册表可供 ESB 查询以确定服务提供者的端点。

下面是使用服务选择器模式的一个示例:一间虚构的公司希望通过提供分层服务使其在竞争对手中脱颖而出。 此公司的目标是, 向其标准客户提供延迟股票报价,而向其支付费用的高端客户提供实时报价。
服务请求者应用程序向基于内容的路由器提供包含股票符号和客户标识的查询, 该路由器将处理此查询。 然后,确定客户的订阅级别,并根据订阅级别将此查询路由到相应的服务供应商。 接着,将服务供应商返回的报价返回给客户机应用程序。 可在 示例方案中找到有关此方案的更多信息。
服务转换程序模式
服务转换程序模式提供对具有不同接口或协议(而不是具有服务请求者所使用的接口或协议)的服务实现的访问。 您可以选择要在某些接口上进行限制或重构的操作,并可以为特定接口的用户转换和格式化数据。
- 要限制对用户界面上的某些功能的访问。
- 需要修改接口以满足某些部门的需求。
- 发出请求的服务期望使用不同的接口或协议。
图 3 显示了服务转换程序模式,该模式将变换请求,然后将其路由到实际服务提供者。 此调解还必须处理来自目标服务的响应,从而将其重新变换为客户机所期望的格式。

下面是服务转换程序模式的一个示例:一间虚构的公司 Personal Holidays 预订机票,并且必须根据虚构航空公司 My Airways 的航班时刻表来检查机票待售情况。 Personal Holidays 订票系统以不同于 My Airways 订票系统的方式来提供信息。 ESB 调解中的服务转换程序模式能够将来自服务请求者的入局消息变换为 My Airways 表示其信息的格式。 可在 示例方案中找到有关此方案的更多信息。
服务网关模式
服务网关模式引入了控制点,并可以使一组服务受 ESB 控制,而不需要为每项服务开发独立的调解。 服务网关提供了单一访问点,并充当多项服务的代理。 另外,服务网关封装了跨所有服务的变换、路由和公共处理。
- 要将消息路由到多个使用各种协议的端点。
- 需要以同一方式访问一组服务,而不需要多个调解。
- 您希望提供跨所有服务的通用处理(例如审计以及安全性实施点)。
图 4 显示服务网关模式。 消息进入网关,接着确定目标服务。 完成公共处理(例如审计),然后将消息路由到端提供者。
服务注册表是一个数据存储库,用于描述一组服务及其相关联的属性和行为。 此注册表可供 ESB 查询以确定服务提供者的端点。

例如,由于法律要求,需要对一家银行的许多完全不同的服务进行审计。 这家银行希望所有服务的审计级别相同。 服务网关模式可用来实现此业务需求。
消息丰富模式
消息丰富模式提供了一种方法对消息中的现有内容进行修改或添加,然后再将该消息转发到服务提供者。 消息丰富的一个示例是,从数据库中检索数据,然后该数据添加到消息中的给定位置。
您可以在发送消息时使用此模式,以便从数据库中获取更多信息。
图 5 显示了消息扩充模式。 进入 ESB 的消息未包含服务提供者需要的所有数据。 ESB 先添加数据,然后再将该消息发送给服务提供者。 例如,服务请求者只了解客户标识和产品标识。 消息丰富功能提供处理订单所需的全部产品详细信息和客户详细信息。

下面是使用服务丰富模式的一个示例:在消息结构中,不存在特定字段。 可以使用“数据库查找”调解原语来确定任何给定实例中的该字段的详细信息。 有关此场景的更多信息可在 服务增补中找到。
批处理聚集模式
批处理聚集模式提供一种方法将入站请求映射到多个要发送到服务提供者的不同出站请求。 来自这些请求的响应可以收集(聚集)到原始请求的单一响应中。
如果需要使用包含多个记录的消息,并且能够将每个记录逐个转发给服务提供者,那么可以使用此模式。
图 6 显示了批处理聚集模式,在该模式中,调解的入站消息将拆分为多个到服务提供者的出站请求,然后收集回单个消息以发送回服务请求者。 服务请求者接收到一个批处理消息中需要的所有相关信息。

多源聚集模式
多源聚集模式提供一种方法将入站请求映射到多个要发送到多个服务提供者的不同出站请求。 来自这些请求的响应可以收集(聚集)到原始请求的单一响应中。
当发送到 ESB 的单一消息需要两个或两个以上服务提供者来处理该消息或其中的组成部分时,您可以使用此模式。 这将向服务请求者发回聚集的响应。
图 7 显示了多源聚集模式,其中调解的入站消息拆分为多个服务提供者的多个出站请求。 然后,将结果收集到单一消息中并将该消息发回给服务请求者。 如果入站请求需要来自许多不同服务提供者的信息(例如报价对比 Web 站点),那么您可以使用此模式。

This topic only applies to BAW, and is located in the BAW repository. Last updated on 2025-01-20 10:38