文档介绍:IBM WebSphere 开发者技术期刊: 使用 WebSphere ESB 构建企业服务总线,第 2 部分
JMS 消息传递示例
文档选项
打印本页
窗体顶端
将此页作为电子邮件发送
未显示需要 JavaScript 的文档选项
窗体底端
样例代码
级别: 中级
Rachel Reinitz (******@us.), 高级 IT 咨询专家, IBM
Andre Tost (******@us.), 高级技术人员, IBM
2007 年 2 月 26 日
第 1 部分介绍了 IBM® WebSphere® Enterprise Service Bus (ESB) 提供的用于构建 ESB 的关键功能,其中使用了一个贯穿本系列的示例业务上下文,还阐述了 WebSphere Application Server 的 SIBus 功能与 WebSphere ESB 之间的关系。第 2 部分演示如何将 J2EE™客户机应用程序连接到 ESB,即通过 JMS 发送消息,让 ESB 记录消息,然后将其路由到消息驱动的 Bean (MDB) 实现的服务提供程序。因此,本文将演示用于 JMS 服务请求程序和 JMS 服务提供程序的 ESB 支持。
摘自 IBM WebSphere 开发者技术期刊。
引言
我们首先通过一个示例开始了最初的 WebSphere Application Server ESB 系列文章,介绍系统集成总线(SIBus) 如何作为应用服务器的缺省 JMS 提供程序。第一篇文章介绍了如何连接 J2EE 应用程序客户机:将一个普通的 JMS 文本消息发送到在实现为消息驱动的 Bean (MDB) 应用服务器上运行的 JMS 服务提供程序。在本文中,我们将使用相同的示例作为开篇,但这次不是将消息从客户机发送到 SIBus 队列,然后 MDB 服务从该队列获取消息,而是通过在 WebSphere ESB 中运行的中介来路由消息。
为将此示例放在业务上下文中,我们将使用第 1 部分中包括的运输公司场景。我们将假设每当向客户机交付数据包时,必须向主系统发送一条消息来确认交付。此确认消息是同步发送的;也就是说,不需要对消息进行响应,只需将消息排队等待主系统进行处理。
回页首
增强的体系结构
ESB 通过提供虚拟服务接口能够构建分离的系统,这意味着客户机不直接访问实际服务提供程序,而是与 ESB 交换消息。ESB 然后在实际服务提供程序之间来回路由消息。这不但对 Web 服务是这样(即服务通过 SOAP/HTTP 绑定公开),而且对任何服务都是这样。在我们的示例中,我们让 J2EE 应用程序从 JMS 队列接收普通文本消息。在 ESB 的上下文中,我们作为一个服务提供程序来查看此应用程序。类似地,我们向 JMS 客户机应用程序提供服务接口。
我们将不花费太多的时间来说明用于此示例的服务请求程序和提供程序代码(这些代码实际上与任何典型的 JMS 代码没有任何区别;有关 JMS 教程,请参见参考资料),但我们先回顾以下基本内容:
J2EE 客户机应用程序仅发送包含交付的数据包数量的消息。
因为此发送程序代码运行于 J2EE 客户机应用程序,我们没有硬编码已使用的 JMS 资源的名称,而是使用 p/env 命名空间。两个名称(一个用于连接工厂,另一个用于实际队列)都使用客户机应用程序部署描述符中的资源引用进行绑定。
客户机最初编写为发送简单的文本消息,但将被更新为发送 XML 消息。
对于 MDB,情况就更为简单:每个 MDB 都有一个名为 onMessage() 的方法,消息一旦到达 MDB 侦听的队列就会调用该方法,然后会将此消息打印到 。
一个有趣的方面是通过 WebSphere ESB 进行路由,现在我们已经分离了客户机 JMS 配置和 MDB 配置——将把它们都配置为与 WebSphere ESB 通信。如果将 MDB 部署在不同的服务器上,则不需要更改客户机应用程序。由于消息流经 WebSphere ESB,因此可以在 ESB 中进行中转。
图 1 显示了与本文将要绑定的内容相比,JMS 请求程序和 MDB 直接通过 SIBus 队列进行连接时的步骤(在前一篇系列文章的第 3 部分进行了描述)。
图 1. 示例场景步骤
在更新的体系结构中,注意我们使用了两个队列:一个在客户机和 WebSphere ESB 中介之间,另一个在中介和实际接收程序(即服务提供程序)之间。图 1 还显示了 WebSphere ESB 构件仍在 WebSphere Application Server 中运行的方式,后者提供 JMS 运行时和承载消息驱动的 Bean。为简便起