WebSphere Message Broker V7 中的模式简介

WebSphere Message Broker V7 在消息流开发中引入了模式。模式是一种可重用解决方案,它封装了能够在特定环境中解决常见架构、设计或部署任务的经过测试的方法。

Ant Phillips, 软件开发人员, WSO2 Inc

Ant Phillips 是位于英国 Hursley 的 IBM Java Technology Centre 的一位软件开发人员。他当前的工作重点是 WebSphere sMash(一个用于创建动态 Web 应用程序的简单环境)。在加入 IBM 前,Ant 曾在英国 Newbury 的一家创新型创业公司担任技术负责人。此前,Ant 曾在 Sony® 和 Microsoft® 工作过,先后在东京、西雅图及二者之间的其他几个地方长期呆过。业余时间,除了和妻子及两个孩子在一起外,他还非常喜欢体育运动。



2010 年 1 月 21 日

简介

模式捕捉解决特定问题时经常用到的解决方案,从而帮助您实现目标。模式说明描述需要解决的问题、问题的重要性以及解决方案的限制。模式通常源于一般的使用实践和应用特定产品或技术。模式能够为反复出现的问题高效地生成定制解决方案。

IBM® WebSphere® Message Broker V7 提供的模式能够:

  • 在您实现解决方案的过程中提供指导。
  • 提高开发效率,因为资源是从一组预定义的模板生成的。
  • 通过资产重用和实现常见的功能(比如错误处理和日志记录)改进质量。

模式概述

使用模式的第一步是选择正确的模式。Message Broker Toolkit 有一个新视图 Patterns Explorer,它提供模式目录和详细帮助。您可以通过帮助找到用于解决特定问题的合适模式。例如,您可能想要实现一个 Web 服务前端,其中请求写到 WebSphere MQ 队列中。Patterns Explorer 将把您引导到一个称为 Service Facade 的模式类别下。

每个模式都拥有值,这些值称为模式参数。您配置的模式参数取决于特定模式和对该模式启用的选项。模式参数的例子之一是通过它读取消息的队列名。模式几乎为所有模式参数提供默认值和相关的解释。

在配置好模式参数之后,就生成了一个模式实例 项目,它是一个包含模式实例配置文件的 Message Broker 项目。配置文件储存您配置的模式参数。这个生成过程还创建一个或多个额外的 Message Broker 项目,它们通常包含实现模式的消息流和其他 Message Broker 工件。

您可以随时打开模式实例配置文件查看模式参数的值。如果重新打开了配置文件,还可以重新生成 Message Broker 项目。重新生成将删除前面生成的 Message Broker 项目并重新创建它们。一定记住,原有的项目将被完全删除并重新开始创建新的项目,这导致您丢失以前对项目的任何修改。

最后的步骤是为生成的项目创建一个 Broker Archive (BAR) 文件。然后,您就可以部署 BAR 文件并测试流。您可能还需要创建其他资源,比如 WebSphere MQ 队列。模式实例项目包含一个 HTML 摘要文件和模式实例配置文件。摘要文件有一个部分专门解释可能需要的额外任务,比如创建队列。

一些模式参数对生成的工件进行基础的更改。例如,如果您选择启用日志和错误处理,那么生成的项目将包含额外的消息流和 ESQL 脚本。在本例中,您还需要创建额外的 WebSphere MQ 队列,其中将错误和日志消息流写入其消息。

开始之前

本文假设您基本熟悉 WebSphere Message Broker。您还需要安装 Message Broker V7,包括 Message Broker Runtime and Toolkit 和 Message Broker Explorer (MBX)。本文还演示如何设置必要的 WebSphere MQ 队列管理器和 Message Broker 执行组。

在本文中,您将在 Message Broker Toolkit 中使用新的 Brokers 视图来创建和配置代理。

您将探索 Message Broker V7 提供的模式。您将尤其关注 Service Facade to WebSphere MQ: one-way with acknowledgement 模式,它将创建一个 Web Service Facade,用于将请求消息写到 WebSphere MQ 队列。您还将把该模式的一个实例部署到代理中,并使用 Message Broker Test Client 测试该模式实例。

此外,您还将部署 Service Facade to WebSphere MQ: request-response 模式的一个实例,它同样将 Web 服务请求写到 WebSphere MQ 队列。与 one-way 模式不同,这个模式在回复 Web 服务请求之前等待 WebSphere MQ 响应消息。要实践这个模式,您需要 下载 rfhutil,它是 IBM 提供的一个著名支持包工具。

最后,您将通过 Message Broker Explorer(MBX)创建和监控 WebSphere MQ 队列。

创建本地代理

您的首要任务是创建一个用于测试模式的代理和执行组。Message Broker V7 的 Toolkit 不再提供 Message Broker Administration 透视图。所有功能都在 Message Broker Explorer(MBX)中执行。为了协助 MBX,Toolkit 提供一个新的用于应用程序开发的 Brokers 视图。它可以创建、开始和停止代理,以及部署 BAR 文件。

在这个小节中,您将通过 Brokers 视图创建一个本地代理:

  1. 启动 Message Broker Toolkit 并切换到 Message Broker Application Development 透视图。
  2. 在 Brokers 视图中,右键单击 Brokers 并选择 New => Local Broker
  3. 为代理和代理队列管理器输入名称。在 Microsoft® Windows® 上,您还需要输入用户名和密码,使用它们配置运行代理的 Windows 服务。
  4. 单击 Finish 创建代理。该代理显示在 Brokers 视图中:
    图 1. 显示在 Brokers 视图中的本地代理
    本地代理
  5. 启动 MBX。可以在 Navigator 中看到本地代理。

祝贺您!您已经成功创建了一个可用于测试模式的本地代理。在下一个小节中,您将创建一个模式实例并将其部署到该本地代理中。

探索模式

Broker Development 视图在当前的工作空间中显示项目,如下面的图 2 所示。该视图分为 3 个部分:

  • 顶端部分显示当前的工作集名,如果不存在则显示 <all resources>。
  • 中间部分显示模式实例项目,它们是在模式生成之后包含配置信息的 Message Broker 项目。您稍后将看到这部分的作用。
  • 底端部分显示标准的 Message Broker 项目,比如消息流项目和 Java 项目。如果工作空间不包含任何标准项目,那么底端部分将显示 Quick Starts
    图 2. Broker Development 视图
    Broker Development 视图

Message Broker 模式显示在 Patterns Explorer 视图中。可以通过几种方式导航到 Patterns Explorer 视图:

  1. 单击 Patterns Explorer 选项卡。
  2. 在 Broker Development 视图的 Pattern Instances 部分单击 New
  3. 在 Broker Development 的 Quick Starts 部分单击 Start from patterns
    图 3. 导航到 Patterns Explorer 视图
    导航到 Patterns Explorer 视图

浏览模式说明

在 Patterns Explorer 中,在树结构的顶部单击 Patterns 标签。此时将显示关于模式的介绍信息。在 Patterns 标签下面是顶级模式类别,比如 Application Integration 和 File Processing。下一个级别包含更具体的类别。例如,在 File Processing 下面是一个 Record Distribution 类别。最后,Patterns Explorer 中的叶标签包含可以实例化的模式。叶模式的图标是不同的,以表示可以实例化它们。

单击 MQ one-way with acknowledgment 模式。此时将在 Message Broker Toolkit 中显示带有完整模式名的模式说明: Service Facade to WebSphere MQ: one-way with acknowledgment 和关于模式的信息,包括什么时候使用该模式、为什么要使用该模式以及该模式的限制。

如果您遇到问题,那么 Patterns Explorer 是解决问题的第一站。Patterns Explorer 的层次结构布局使您能够从高级模式类别(抽象模式)导航到可以实例化的具体模式。

创建模式实例

要创建 Service Facade to WebSphere MQ: one-way with acknowledgment 模式的一个实例,在模式说明的底部单击 Create New Instance。输入 OneWay 作为模式的名称并单击 OK

此时将显示 Pattern Configuration Editor,您可以通过它配置模式实例。模式参数根据相关度分组到不同的部分中,比如 Service Information、Logging 和 Error Handling。可以单击打开每个部分。下面的图 4 显示需要填充一个模式参数 —— Service WSDL。 其他模式参数中的绿色箭头表明这些模式参数都使用有效的默认值。

图 4. 配置模式实例的参数
配置模式实例的参数

您实例化的模式为 WebSphere MQ 队列创建了一个 Web Service Facade。到达生成的消息流中的 Web 服务请求将被放入到一个队列中,这是使用 Message Broker 需要解决的常见问题。Web 服务使用 Web 服务描述语言(WSDL)进行描述,您需要一个 WSDL 文件来实例化该模式。为了帮助您快速开始使用模式,Patterns Explorer 提供一个样例 WSDL 文件:

  1. 在 Pattern Configuration 编辑器的底部,单击 Specification
  2. 向下滚动到 Related tasks 并单击 Resources to get you started with the pattern
  3. 单击 Import the sample resources into your workspace
  4. 继续在向导中进行单击,直到在您的工作空间中创建了一个新的消息设置项目。它包含一个名为 OrderService.wsdl 的 WSDL 文件。
  5. 切换回到编辑器的 Configuration 选项卡并单击 Browse
  6. 从可用的 WSDL 文件列表中单击 OrderService.wsdl
  7. 最后一步是通过单击 Generate 生成模式实例。

生成的项目和文件

在您的工作空间中创建了 2 个项目,如下面的图 5 所示。第一个项目是一个名为 OneWay 的模式实例项目,它包含的 XML 文件包含了您在 Pattern Configuration 编辑器中配置的模式参数:

图 5. 为模式实例生成的项目
为模式实例生成的项目

该模式实例项目还包含一个名为 OneWay_summary.html 的摘要文件,它包含关于模式实例项目的描述。该摘要文件还包含成功部署模式实例需要完成的其他任务:

图 6. 模式实例的摘要文件
模式实例的摘要文件

在模式实例项目下面是另一个名为 OneWay_Flows 的项目,它包含 Message Broker 工件,比如消息流和 ESQL 脚本。这些工件实现该模式 ,并且可以部署到代理中。不过,我们先仔细查看摘要文件。Tasks to Complete 部分告诉您需要创建两个 WebSphere MQ 队列,它们的名称分别为 ERROR 和 PROVIDER。这些队列名是模式参数,因此您可以在 Pattern Configuration 编辑器中更改它们。

创建队列

在部署消息流之前,您还需要创建模式所需的队列:

  1. 切换到 MBX。
  2. 在 PATTERNSQMGR 队列管理器下右键单击 Queues 并选择 New => Local Queue
  3. 输入 ERROR 作为队列的名称并单击 OK
  4. 重复以上步骤创建第二个名为 PROVIDER 的队列。现在,您拥有两个本地队列:
    图 7. ERROR 和 PROVIDER 队列
    ERROR 和 PROVIDER 队列

部署生成的消息流

下一步是部署生成的消息流。您将需要一个 BAR 文件:

  1. 右键单击 OneWay_Flows 并选择 New => Message Broker Archive
  2. 配置 BAR 文件 ProjectName,并单击 Finish
  3. 在 BAR 文件编辑器中,选择 Message Flow 和 Message Sets:
    图 8. 为 Message Broker Archive 选择资源
    为 Message Broker Archive 选择资源
  4. 构建并保存 BAR 文件。现在,您的消息流可以部署了!
  5. 将 BAR 文件拖放到 Brokers 视图中的执行组。这将把 BAR 文件部署到您先前创建的执行组:
    图 9. 将生成的消息流部署到本地代理中
    将生成的消息流部署到本地代理中

Message Broker Test Client

要测试 Web 服务,请使用 Message Broker Test Client:

  1. 单击 File => New 并从 Message Broker 类别选择 Message Broker Test Client
  2. 为 Message Broker Test Client 配置 ProjectName 并单击 OK。此时将创建一个新的 Message Broker Test Client 文件并打开编辑器。
  3. 在测试消息流之前,您需要配置它。切换到编辑器底部的 Configure 选项卡并单击 Message Flows,然后单击 Add
  4. 在 Resources 对话框中选择 Request.msgflow 并单击 OK
  5. 单击 Deployment 并选择手动部署 BAR 文件的选项。您还需通过单击 Browse 选择 BAR 文件:
    图 10. 选择手动部署 Message Broker Archive
    选择手动部署 Message Broker Archive
  6. 最后的任务是配置 WebSphere MQ 设置。单击 MQ Settings 并确保取消选择 Stop when the first MQ message is received。选择 Browse message from MQ output queue。这些选择指定 Test Client 检测到消息到达 ERROR 和 PROVIDER 队列时作出什么样的响应。您是通过 Web 服务请求和响应测试消息流的,所以仅要求 Test Client 监控队列。
    图 11. 配置 WebSphere MQ 设置
    配置 WebSphere MQ 设置
  7. 切换回到 Events 选项卡。您可以看到已经配置了 Web 服务请求,如下面的图 12 所示。Test Client 通过查看为了进行测试而配置的流来完成该任务。Test Client 分析了在消息流中配置的 WSDL 文件,并构造了发送到流的合适 Web 服务请求。这非常有用!Web 服务请求中的细节是一个一个购买订单,您需要发送它来发起一个订单请求:
    图 12. 购买订单 Web 服务请求
    购买订单 Web 服务请求
  8. 通过从下拉列表中选择 Edit as text,可以看到该请求的文本。
  9. 继续前进,将 Web 服务请求发送到消息流。在 Test Client 工具栏上单击 Start,然后在打开 Deployment Location 对话框时单击 Finish。将显示下面的事件:
    图 13. Message Broker Test Client 中的事件
    Message Broker Test Client 中的事件
  10. 单击 Received HTTP Reply message。将显示消息流响应的回复消息。您可以看到购买订单已经被接受:
    图 14. 来自消息流的回复消息
    来自消息流的回复消息
  11. 现在,单击 MQ Queue Monitor PROVIDER 事件。Test Client 显示一条消息流放置在 PROVIDER 队列上的消息,如下面的图 15 所示。消息流已经接受 Web 服务请求并将请求消息放到 PROVIDER 队列中。在现实的部署中,您必须通过一个应用程序来监控 PROVIDER 队列,并让它在购买订单请求到达时作出响应。
    图 15. 写到 PROVIDER 队列的消息
    写到 PROVIDER 队列的消息

祝贺您!您已经成功部署并测试了 Web service facade to a WebSphere MQ queue 模式!

探索 MBX 中的队列

图 16. 测试运行完毕之后的队列长度
测试运行完毕之后的队列长度
  1. 切换到 MBX,右键单击 PROVIDER 队列并选择 Browse Messages。这时将在 Message 浏览器对话框中显示队列上的消息列表:
    图 17. 从 PROVIDER 队列显示需要显示的消息
    从 PROVIDER 队列显示需要显示的消息
  2. 右键单击消息并选择 Properties => Data。属性窗口显示您使用 Test Client 发送的 Web 服务请求。
  3. 您还可清除来自 PROVIDER 队列的消息。右键单击队列名并选择 Clear Messages。选择 Queue will be cleared using MQGET API calls 并单击 Clear。清除队列可以避免为测试和调试流带来混乱。

删除模式实例项目

在进入下一个小节之前,清除您的资源。右键单击执行组并选择 Delete => All Flows and Resources。在 Broker Development 视图中右键单击模式实例项目并选择 Delete。在删除对话框中,删除模式实例项目和消息流项目。

创建 Web 服务请求-响应模式

您部署的 Service Facade to WebSphere MQ: one-way with acknowledgement 模式接受 Web 服务请求并将它写到 WebSphere MQ 队列。在这个小节中,您将使用更高级的模式 Service Facade to WebSphere MQ: request-response。这个模式也将 Web 服务请求写到 WebSphere MQ 队列。该模式与前面模式的区别是,它在发送 Web 服务回复之前等待响应队列上的响应消息。

  1. 在 Patterns Explorer 中右键单击 MQ request-response 模式并选择 Create New Instance
  2. 输入 RequestResponse 作为模式实例的名称。
  3. 在 Pattern Configuration Editor 中,在 Service WSDL 上单击 Browse 并选择 OrderService.wsdl
  4. 选择 Content and value 作为验证参数,它指示生成的消息流验证所有 Web 服务请求和响应。
  5. 打开 Logging 部分并设置为 Logging required
  6. 单击 Generate 创建模式实例和生成消息流。
    图 18. 配置模式实例参数
    配置模式实例参数

    模式实例的摘要文件显示需要创建的其他队列 —— RESPONSE、STORE、ERROR、LOG 和 PROVIDER。

部署生成的消息流

  1. 在 MBX 中创建其他队列(RESPONSE、STORE 和 LOG):
    图 19. 请求-响应模式所需的其他队列
    请求-响应模式所需的其他队列
  2. 创建包含生成的消息流的 BAR 文件并将其部署到本地代理:
    图 20. 部署到代理的模式实例
    部署到代理的模式实例

测试生成的流

现在测试生成的消息流。

  1. 创建另一个 Message Broker Test Client 文件。
  2. 在测试消息流之前,您需要配置它。在编辑器的底部切换到 Configure 选项卡。单击 Message Flows 之后再单击 Add
  3. 在 Resources 对话框中选择 Request.msgflow 并单击 OK
  4. 单击 Deployment 并选择手动打开 BAR 文件的选项。您还需要通过单击 Browse 选择 BAR 文件。
  5. 单击 MQ Settings 并确保取消选择 Stop when the first MQ message is received。此外,还要选择 Browse message from MQ output queue。这些选择指定 Test Client 检测到消息到达 ERROR 和 PROVIDER 队列时作出什么样的响应。您是通过 Web 服务请求和响应测试消息流的,所以仅要求 Test Client 监控队列。
  6. 单击 Start。您将看到与前面的事件类似的事件。但这次没有接收到任何回复消息,因为消息流在发送 Web 服务响应之前等待回复消息到达 WebSphere MQ 队列。
    图 21. 使用 Message Broker Test Client 测试模式实例
    使用 Message Broker Test Client 测试模式实例
  7. 切换到 MBX 查看队列的活动。您可以看到消息已被发送到 PROVIDER、STORE 和 LOG 队列:
    图 22. 发送 Web 服务请求之后的对列活动
    发送 Web 服务请求之后的对列活动

PROVIDER 消息是从 Test Client 发送来的 Web 服务请求(该行为与前面的 one-way 模式一样)。当一个消息流完成之后,生成的消息流就创建一条 LOG 消息。

这个模式的关键之处是理解请求和响应处理是分开的。请求消息流接收 Web 服务请求,并将其写到 PROVIDER 队列,直至最后完成(在将消息写到 LOG 队列之后)。响应消息流等待 RESPONSE 消息队列。当一条消息到达时,它将把请求和响应消息关联起来(这个奇妙的行为通过 STORE 队列实现)并发送回复。当响应消息流完成处理之后,它还向 LOG 队列发送一条消息。

在现实的部署中,应用程序将处理来自 PROVIDER 队列的消息,并将响应发送到 RESPONSE 队列。要模拟这个行为,您可以使用 rfhutil:

  1. 启动 rfhutil 并对 Queue Manager 输入 PATTERNSQMGR
  2. Queue Name 输入 PROVIDER
  3. 单击 Read Q 读取来自= PROVIDER 队列的消息。
  4. 单击 Data 选项卡,您将看到 Test Client 发送的 Web 服务请求:
    图 23. 写到 PROVIDER 队列的消息
    写到 PROVIDER 队列的消息

    在 PROVIDER 队列上的消息包含一个消息标识符,生成的消息流使用它将请求和响应关联起来。将要发送 到 RESPONSE 队列的消息必须具有相同的消息标识符。

  5. 单击 Ids => Save Msg Id 储存 PROVIDER 消息标识符。
  6. 将下面的 XML 复制粘贴到一个文本文件中,并将该文件保存到磁盘:
    清单 1. Web 服务响应消息
    <test:submitPOResponse xmlns:test="http://www.acmeOrders.com/OrderService">
    <orderStatus>OK</orderStatus>
    <orderAmt>999</orderAmt>
    <partNo>1234</partNo>
    <partQuantity>5</partQuantity>
    </test:submitPOResponse>
  7. Main 页面上单击 Open File,然后打开刚才创建的文件。
  8. 单击 Ids => Restore Msg Id 储存 PROVIDER 消息标识符。
  9. 单击 MQMD 选项卡并检查是否储存了消息标识符:
    图 24. RESPONSE 消息标识符
    RESPONSE 消息标识符
  10. Main 选项卡上将 Queue Name 更改为 RESPONSE
  11. 单击 Write Q 并切换回到 Test Client Events 视图:
    图 25. Message Broker Test Client 的回复消息事件
    Message Broker Test Client 的回复消息事件

    您可以看到 Test Client 已经接收了回复消息。如果发送 Web 服务请求和将响应消息写到 RESPONSE 队列之间的时间超过 3 分钟,那么 Test Client 将超时。对于这种情况,您必须重新发送 Web 服务请求,并重复对 rfhutil 执行的操作。

  12. 单击 Received HTTP Reply message,您将看到以下回复消息:
    图 26. 来自模式实例的回复消息
    来自模式实例的回复消息

    该消息与您保存在文件中并写到 RESPONSE 队列的 XML 消息匹配。响应消息流从 RESPONSE 队列读取消息。该流匹配它发送到 RESPONSE 队列的请求消息。这个奇妙的行为是通过 STORE 队列来完成的。然后,响应消息流将回复发送到 Test Client。

祝贺您!您已经成功地创建、部署和测试了 Service Facade to WebSphere MQ: request-response 模式。您已经成功部署了两个 Message Broker 模式,不过您还可以尝试部署其他模式。您还可以深入探索实现 Service Facade to WebSphere MQ: request-response 模式的流。

结束语

通过本文的实践,您:

  1. 了解 Message Broker 和 Patterns Explorer 中的模式。
  2. 通过新的 Brokers 视图创建本地代理。
  3. 创建 Service Facade to WebSphere MQ: one-way with acknowledgement 模式的实例。
  4. 使用 Message Broker Test Client 部署和测试模式。
  5. 创建 Service Facade to WebSphere MQ: request-response 模式的实例。
  6. Message Broker Test Client 和 rfhutil 部署和测试模式。
  7. 使用 Message Broker Explorer(MBX)创建和监控队列。

参考资料

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=463332
ArticleTitle=WebSphere Message Broker V7 中的模式简介
publish-date=01212010