本文介绍了实现一个自产的轻量型">企业服务总线 (ESB) 的设计蓝图,该企业服务总线利用了常用的集成开发环境 (IDE) 和中间件。本文中的场景使用了 IBM® WebSphere® Application Server V8(一个用于 Java EE 应用程序的强健的部署环境)和 IBM Rational® Software Architect(提供了工具来设计、开发、测试和打包要部署到应用服务器上的 Java EE 应用程序)。
业务场景
挑战
为了满足业务需求,一家服务提供商需要在一年内提供其应用程序的多个版本。每个版本都需要更新现有服务协议,并将一个新的 Web 服务版本部署到一个生产环境中。
最富有成本效益的解决方案通常是将单一服务实例部署在生产环境中,以减少维护成本。但是,由于预算限制或维护计划,服务用户并不总是会在新版本发布后尽快采用它。此场景迫使服务提供商托管多个服务版本来支持客户需求。
解决方案
WebSphere Enterprise Service Bus (WebSphere ESB) 和 WebSphere DataPower® Appliances 都提供了强健的 ESB 功能,支持在服务用户和提供商之间动态路由和转换请求。这些功能使服务用户能与处理请求的服务实例分离开来。通过利用 ESB,服务提供商可签署多个服务协议,而无需在生产环境中托管服务的多个实例。
当只需要 WebSphere ESB 和 WebSphere DataPower 中提供的功能的子集时,客户可以选择将轻量型的 ESB 功能构建到他们的 Java EE 应用程序中,以满足其项目的特定需求。
实现轻量型 ESB 的蓝图
实现一个轻量型 ESB 的蓝图应包含多个层,以处理接收、路由、转换和响应客户请求所需的不同功能。本文给出的蓝图包含以下 4 个层:
路由层 -- 一个 Java API for RESTful Web Services (JAX-RS) RESTful 端点,用于 URL
模式匹配和请求路由。 中介层 -- 在数据内容级别管理客户端与特定服务版本之间的请求的中介和映射模块。 服务调用层 -- 服务协议的管理器,用于构建需要的请求,调用一个物理服务端点,以及在响应中返回内容。 多协议监听器层 -- 一个监听器服务,比如 WebSphere MQ、Java Message Service (JMS),或另一个供非 JAX- RS 客户端应用程序加入轻量型 ESB 的服务。
图 1 显示了这个轻量型 ESB 蓝图的 4 层的高级设计和界面:
图 1. 轻量型 ESB 蓝图的设计和界面
在真实示例中应用这个轻量型 ESB 蓝图
下面的示例展示了该蓝图的一个真实使用场景:
一个服务提供商将其 MyService 的当前产品实例从版本 A 更新到版本 B。 MyService 版本 B 的安装会导致 MyService 版本 A 被淘汰,因此服务提供商仅支持 MyService 版本 B 的一个实例。 服务提供商与 ESB 设计团队合作定义必要的路由、中介和服务调用逻辑,以对新客户和现有客户提供持续的支持。 ESB 设计团队利用该蓝图实现一个支持两个 MyService 版本的客户端解决方案。