使用 WebSphere ESB 构建企业服务总线,第 4 部分
 

2009-07-07 作者:Rachel Reinitz,Andre Tost 来源:IBM

 
本文内容包括:
在本系列的前两篇文章中,我们讨论了如何利用 IBM® WebSphere® Enterprise Service Bus (ESB) 中对 JMS 和 Web 服务的支持。在本期中,我们将介绍如何利用 WebSphere ESB 6.0.2 版中针对直接 MQ 连接而引入的一种新型绑定,以便将 IBM WebSphere ESB 中介模块与现有的 WebSphere MQ 环境连接到一起。

引言

我们已经介绍了 WebSphere Enterprise Service Bus (ESB) 支持的两种最常用的连接协议——JMS Web 服务 (SOAP/HTTP),现在将向这一组合中添加实际企业环境中通常需要的另一种协议:WebSphere MQ。

有很多应用程序已支持通过 WebSphere MQ 与外部应用程序进行消息交换,它们通常使用 ESB 在 MQ 上将应用程序功能转换为或公开为服务。因此,我们在此处将演示如何利用 WebSphere ESB 中对 WebSphere MQ 的支持来将支持 MQ 通信的现有应用程序绑定到面向服务的环境中。

更新的场景

第 2 部分中,我们介绍了 Posts-R-Us 传递的每个包如何产生一条先发送至 ESB,再由 ESB 转发给使用消息驱动 (MDB) Bean 的 Java™ EE 应用程序的消息。此级别的间接寻址方式会在生成事件(即包传递事件)的系统与使用该事件的系统(接收该消息的 MDB)之间建立一个分离层。在 SOA 上下文中,这意味着 ESB 向客户机提供了一个虚拟服务接口,该接口隐藏了服务提供程序的实际位置和接口。

在 Posts-R-Us 中,有一个现有的基于大型机的应用程序也需要接收关于该传递的包的消息。它通过 WebSphere MQ 队列以 XML 格式接收这些消息。因此,设计团队决定更改 ESB 中介:添加一个连接,将传入的通知消息转发给适当的 MQ 队列,同时继续将该消息发送给原始的 Java EE(前身为 J2EE)应用程序。图 1 显示了更新的体系结构。

图 1. 更新的包传递通知体系结构
图 1. 更新的包传递通知体系结构

如图所示,消息用单独的进程转发,目标队列由远程 WebSphere MQ 队列管理器管理;而原始队列则不改变进程,它仍由 WebSphere ESB 管理并从中传输至消息驱动 Bean。

此处需要注意以下几点,所有这些注意事项都说明了 ESB 对系统体系结构的巨大价值:

  • 客户机应用程序不受此更改影响。它会继续通过 ESB 将 JMS 消息发送至目的地。
  • 现有的 MDB 应用程序也不受此更改影响。
  • 现有的大型机应用程序将继续从关联的 WebSphere MQ 队列中接收消息。

设置 WebSphere MQ

要运行反映上述体系结构的示例,需要创建将从 WebSphere ESB 接收消息的队列。(在实际企业环境中,大型机应用程序帧听的队列可能已经存在。)为此,最简单的方法是利用 WebSphere MQ Explorer。启动此程序后,其主窗口将类似于图 2。

图 2. WebSphere MQ Explorer 主窗口
图 2. WebSphere MQ Explorer 主窗口

请记住,您通常会有一个或多个 WebSphere MQ 队列管理器。在上图中,我们要使用的队列管理器为 QM_atost。要在此队列管理器下创建队列,请在 WebSphere MQ Explorer Navigator 中右键单击 Queues 节点,然后选择 New => Local Queue...(图 3)。

图 3. 新建本地队列
图 3. 新建本地队列

接下来,请在结果对话框中将新队列命名为 PackageReceivedQueue,保留所有其他缺省值,然后单击 Finish

这些便是您需要在 WebSphere MQ 中执行的所有操作。您不需要创建任何特定的连接配置即可与 WebSphere ESB 进行通信。

中介模块

接下来,您需要更新我们已在第 2 部分中使用过的中介。

  1. 在 WebSphere Integration Developer 中,请打开组装工具的 PackageReceivedModule 模块。此模块由中介流组件、JMSClientExport 导出和 MDBImport 导入组成。
  2. 请从调色板中通过拖动向程序集添加另一个导入。然后,请将新的导入命名为 MQImport 并将其连接到中介流组件,如图 4 所示。
    图 4. 向中介模块程序集添加另一个导入
    图 4. 向中介模块程序集添加另一个导入
     
  3. 现在,将生成绑定来将此导入和前面创建的 WebSphere MQ 队列连接起来。方法是:右键单击 MQImport,然后选择 Generate Binding..=>Messaging Binding..=> MQ Binding
    图 5. 创建 MQ 绑定
    图 5. 创建 MQ 绑定
     
  4. 在结果对话框中,请输入或选择下列值(图 6):
    • 队列管理器名称:请输入队列管理器的名称;在本示例中,我们使用的是 QM_atost
    • 发送目标队列: PackageReceivedQueue
    • 主机名称: localhost
    • 请求序列化类型:Serialized as XML

    请保留所有其他字段的缺省值。
    图 6. MQ 绑定定义
    图 6. MQ 绑定定义

    此过程会将中介模块中的导入连接到前面创建的 WebSphere MQ 队列。此外,它还指定应将消息的有效负载以序列化的 XML 消息的形式发送给该队列。在后面运行最终测试时,您将看到该 XML 消息的样子。如有必要,您还可以在创建绑定后对它做出进一步更改,此时只需打开该导入的 Properties 视图即可。
    图 7. MQ 绑定 Properties 视图
    图 7. MQ 绑定 Properties 视图

  5. 接下来,请创建中介流组件的实现。由于我们要使用的实现非常简单,因此您只需生成一个新实现,而不用更新现有的实现。操作方法是:在程序集中,右键单击中介流组件 PackageReceivedMediation,然后选择 Regenerate Implementation 菜单选项。随即将打开 Mediation Flow Editor。
  6. 接着,请将左侧的接口节点连接到右侧的两个引用节点,如图 8 所示。在此操作中,应确保先将该接口节点连接到 PackageReceivedIFPartner1 引用。
  7. 请向中介流中插入一个 Message Logger 中介元素,并将其连接到 Input 节点。然后,请将 Logger 元素的输出终端连接到两个 Callout 节点。此操作将记录消息,然后将消息同时转发给两个导入,即 MDB 帧听的 JMS 队列和您在前面定义的 MQ 队列。
    图 8. 更新的中介流
    图 8. 更新的中介流
  8. 请保存所有更改。另外,请从主工具菜单中运行 Project => Clean... 菜单选项。此操作可确保按照您刚才做出的更改构建并更新该中介模块所需的所有构件。

运行更新的场景

现在,您已经做好了准备,可以运行测试来查看所做更改的效果了:

  1. 如果服务器尚未启动,请启动服务器。在本测试中,我们将假设服务器上未部署任何企业应用程序。如果您部署了任何现有的 EAR 文件,应删除它们,然后重新启动服务器。
  2. 在 Server Perspective 中,请右键单击 WebSphere ESB 服务器,然后选择 Add and remove projects...。依次添加 PackageReceivedModuleApp 项目和 PackageReceivedEAR 项目,然后单击 Finish
  3. 重新启动服务器。
  4. 请在 PackageReceivedClientEAR 项目中运行测试客户机。(这与第 2 部分中介绍的完全相同。)这样,您便可以在控制台中查看消息驱动 Bean 如何接收该消息(图 9)。
    图 9. 服务器控制台
    图 9. 服务器控制台
  5. 请记住,该消息还会被转发给 WebSphere MQ 队列。要确保消息发送成功,请打开 WebSphere MQ Explorer,导航到 PackageReceivedQueue 队列,然后浏览其中的消息(图 10)。
    图 10. 浏览 WebSphere MQ 队列消息
    图 10. 浏览 WebSphere MQ 队列消息
  6. 右键单击队列中的消息,然后选择 Data 选项卡(图 11)。这会显示实际消息的内容。您将看到,消息由消息头部分以及用 XML 字符串形式表示的有效负载组成(还记得吗,我们前面要求以序列化的 XML 格式发送消息)。
    图 11. XML 消息
    图 11. XML 消息

如果您要用此示例做进一步试验,可以在 MQ 导入的调出节点之前添加 XSL Transformation 中介元素。这样,您可以将传入消息转换为适合后端应用程序的格式。

结束语

通过上述说明,您了解到如何在现有的 WebSphere MQ 系统中添加连接,以此来扩展第 2 部分中开发的场景。在此过程中,我们向中介流添加了一个导入,然后在该组件上生成 MQ 绑定,并利用这些绑定将该组件与受远程队列管理器控制的现有 WebSphere MQ 队列连接在一起。此过程只需进行少量配置即可实现,并且这种更改不会影响场景中已有的任何部分。

迄今为止,您已学习了如何在与 WebSphere ESB 通信时使用三种协议:JMS、SOAP/HTTP 和 WebSphere MQ。在本系列的下一部分中,我们将介绍如何在这三种协议之间进行切换,其中包括交替使用异步调用和同步调用。请继续关注!

下载

描述 名字 大小 下载方法
Code sample
part4-downloads.zip
25 KB

参考资料


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织