在 SIBus 和 WebSphere MQ 之间进行简单的消息交换

引言

到目前为止,我们已经在这一文章系列中研究了 WebSphere V6 Messaging Resources 的基础知识、如何建立企业服务总线 (ESB)、如何将 JMS 用作跨总线的消息协议、如何开发和安装简单中介,以及如何通过总线路由从客户机到 SOAP 提供者的 SOAP 请求。我们的总体解决方案已在下列文章中得到了发展:

现在,在第 6 部分中,我们将在 IBM WebSphere MQ 和 WebSphere V6 Message Resources 之间配置和测试发送的消息。

将 SIBus 连接到 MQ 的概念

不管 IBM WebSphere MQ 队列管理器是远程的还是与 IBM WebSphere Application Server V6 共存于同一台计算机上,都可将其配置为使用 WebSphere V6 Message Resources(也称为系统集成总线 (Systems Integration Bus) 或 SIBus)交换消息。由于 WebSphere MQ 和 WebSphere SIBus 不共享任何模块或配置数据,因此对每一方进行配置都必须使用另一方的信息。

SIBus 的核心组件是消息传递引擎 (ME),它是与应用程序进行对话的 SIBus 组件。必须为每个总线至少定义一个 ME。ME 与已添加到总线作为总线成员的特定服务器或服务器集群相关联。可以以多种方式将总线配置为跨多个服务器(即,它可以具有多个总线成员),但是在特定的总线中每个服务器始终至少有一个消息传递引擎。在我们的简单设置中,我们有一个总线,带有一个成员和一个消息传递引擎。这样做非常重要,其原因在于,当我们将 MQ 连接到总线时,该操作是通过消息传递引擎组件完成的。


图 1. 消息传递引擎
图 1. 消息传递引擎

我们将使用的其他 SIBus 组件如下:

  • 外部总线是位于当前 SIBus 的外部的总线;它可以是另一个 SIBus 或 MQ 队列管理器。
  • 外部目的地是一种设计用来将消息发送到外部总线的目的地。

常规的队列目的地可配置为从外部总线接收消息。

MQ 队列管理器对于 SIBus 好像是一个外部总线。消息传递引擎对于 WebSphere MQ 好像是另一个队列管理器。在 SIBus 端,ME 和队列管理器之间的连接是通过 SIBus 的 MQLink 组件建立的。MQLink 在 MQ 和 SIBus 使用的格式和协议之间进行转换。一个特定的 MQ 队列管理器仅有一个 SIBus MQLink。在 MQ 端,MQ 通道定义为与特定的 SIBus 消息传递引擎进行通信。

有关这些总线组件的详细信息,请参见 WebSphere Application Server V6 Information Center


图 2. SIBus 组件
图 2. SIBus 组件 

在 SIBus 和 WebSphere MQ 之间发送消息

为了使您能概括地了解这一部分所涉及的内容,下面总结了在 SIBus (TheBus) 和 WebSphere MQ 之间传递消息的主要任务。我们将在随后部分中对每一组任务进行详细介绍。

连接 SIBus 和 MQ 队列管理器

  1. 在 WebSphere Application Server 中创建指向 MQ 队列管理器的外部总线。

  2. 在 WebSphere Application Server 中创建从 TheBus 到 MQ 队列管理器的 MQ 链接。

  3. 在 WebSphere MQ 中创建链接到 TheBus 的传输队列(好像另一个 MQ 队列管理器)。

  4. 在 WebSphere MQ 中定义发送方和接收方通道。

WebSphere Application Server 和 WebSphere MQ 中的这些定义使用公共的 TCP/IP 主机名和端口建立通信。

将消息从 SIBusTo 发送到 WebSphere MQ

  1. 在 WebSphere Application Server 中创建指向 MQ 队列的外部目的地。

  2. 将消息发送到外部目的地。对于我们的测试,我们将使用第 3 部分的 JMS 客户机将消息发送到一个目的地,然后再转发到外部目的地。

  3. 消息是通过总线发送到 MQ 队列的。我们将使用 rfhutil 实用工具来查看 MQ 队列上的消息。

将消息从 WebSphere MQ 发送到 SIBus

  1. 在 WebSphere Application Server 中创建队列目的地。

  2. 在 WebSphere MQ 中,创建引用 TheBus 上的目的地的远程队列。

  3. 使用 rfhutil 或另一个程序将消息放入 MQ 远程队列中。

  4. 通过 WebSphere MQ 将消息发送到总线上的目的地。对于我们的测试,我们将使用记录中介查看消息是否已传递到目的地。

配置 SIBus 以与 WebSphere MQ 进行通信

在 SIBus 中,我们将创建外部总线和 MQ 链接以与 WebSphere MQ 进行通信。

创建外部总线

  1. 打开 WebSphere Application Server 管理控制台(服务器必须在运行)。

  2. 在左侧的导航窗格中,选择 Service Integration => Buses

  3. 选择 TheBus

  4. 在下一个窗口中,选择 Foreign Buses (图 3)。


    图 3. 总线属性
    图 3. 总线属性
  5. 选择 New。

  6. 步骤 1:外部总线属性。提供了一个名称(是用于 SIBus 中的外部总线的标识符):TheForeignBus(图 4)。


    图 4. 步骤 1:外部总线属性
    图 4. 步骤 1:外部总线属性
  7. 步骤 2:路由定义类型。对于路由定义类型,请选择 Direct, WebSphere MQ link(图 5)。


    图 5. 步骤 2:路由定义类型
    图 5. 步骤 2:路由定义类型
  8. 由于步骤 3 对用户 ID 没有要求,因此选择 Next

  9. 分别单击 Finish Save

  10. 现在您将在 TheBus 的外部总线列表中看到 TheForeignBus(图 6)。


    图 6. 外部总线列表
    图 6. 外部总线列表

创建 WebSphere MQ 链接

接下来,我们需要设置从 SIBus 到 WebSphere MQ 的链接,包括将 SIBus 标识为 WebSphere MQ 的队列管理器。然后,我们需要配置与队列管理器中的通道相匹配的的发送和接收通道。

  1. 在管理控制台左侧的导航窗格中,选择 Service Integration => Buses => TheBus

  2. 在下一个窗格中,选择 Messaging engines(图 7)。


    图 7. 总线属性
    图 7. 总线属性
  3. 选择 Node1.server1-TheBus

  4. 在下一个面板的右侧,选择 WebSphere MQ links(图 8)。


    图 8. 消息传递引擎配置
    图 8. 消息传递引擎配置
  5. 选择 New

  6. 步骤 1:通用 WebSphere MQ 链接属性。输入或选择下列值(图 9):

    • Name(仅用于 SIBus):LocalMQLink
    • Foreign bus name:TheForeignBus(它是我们在上一步中创建的,将可能是仅有的一个外部总线名称)
    • Queue manager name:QM_TheBus(通过此名称——而非 MQ 队列管理器的名称——您希望消息传递引擎为 MQ 队列管理器所知)

    选择 Next


    图 9. 通用 WebSphere MQ 链接属性
    图 9. 通用 WebSphere MQ 链接属性
  7. 步骤 2:发送方通道 WebSphere MQ 链接属性。发送方通道和接收方通道成对地起作用。该通道将成为用于将消息从总线发送到 WebSphere MQ 的连接。它需要与队列管理器所使用的名称、主机名和端口相匹配,以接收来自总线的消息。缺省情况下,队列管理器使用端口 1414 接收传入的消息。输入或选择下列值(图 10):

    • Sender MQ channel name:busToMQ(这可以是任意选择的名称,但它必须与 MQ 队列管理器中的接收方通道名称相匹配。)
    • Host name(属于队列管理器):localhost
    • Port(显示队列管理器的缺省端口):1414
    • Transport chain:OutboundBasicMQLink

    选择 Next


    图 10. 步骤 2:发送方通道 WebSphere MQ 链接属性
    图 10. 步骤 2:发送方通道 WebSphere MQ 链接属性
  8. 步骤 3:接收方通道 WebSphere MQ 链接属性。该通道将成为用于从 WebSphere MQ 到总线接收消息的连接。它必须与队列管理器所使用的名称、主机名和端口相匹配,以将消息发送到总线。缺省情况下,SIBus 使用用于嵌入消息传递的端口 5558 (通用 WebSphere 设置的一部分)接收传入的消息。输入或选择下列值(图 11):

    • Receiver MQ channel name:MQToBus(这可以是任意选择的名称,但它必须与队列管理器中的发送方通道名称相匹配。)
    • 不需要定义主机名和端口,因为 WebSphere 嵌入消息传递配置用于接收消息;即,缺省情况下,它使用应用程序服务器的主机名和端口 5558。
    • 选择 Next

    图 11. 步骤 3:接收方通道 WebSphere MQ 链接属性
    图 11. 步骤 3:接收方通道 WebSphere MQ 链接属性
  9. 步骤 4:WebSphere MQ 链接属性小结。完成并保存更改。

  10. 重新启动服务器以使新的链接在外部可用。

配置队列管理器以与 SIBus 进行通信

WebSphere MQ 的示例屏幕快照来自 Windows® 平台。虽然面板的外观将随平台的变化而有所变化,但所输入的信息将是相同的。

从本质上而言,配置 MQ 队列管理器以与 SIBus 进行通信的过程,与配置两个 MQ 队列管理器以进行相互通信的过程相同。如果执行 WebSphere MQ 的缺省安装,那么您就具有名为 QM_machine 的队列管理器;这是我们将使用的队列管理器。在我们的示例中,我们将使用名为 QM_reinitz 的队列管理器。

  1. 打开 WebSphere MQ Explorer,导航到 Start menu => Programs => IBM WebSphere MQ => WebSphere MQ Explorer

创建传输队列

创建传输队列,以提供带有指向 SIBus 的链接的 QM_reinitz 队列管理器作为队列管理器。

  1. 展开 WebSphere MQ => QM_reinitz


    图 12. 创建新队列
    图 12. 创建新队列
  2. 右键单击 Queues,然后选择 New => Local Queue

  3. 在 Local Queue 对话框中(图 13),选择 General 选项卡。

  4. 输入或选择以下值:

    • Queue Name:QM_TheBus(必须是在 MQ 链接定义中使用的队列管理器名称)
    • Usage:Transmission

    选择 OK


    图 13. 创建 Local Queue 对话框
    图 13. 创建 Local Queue 对话框

    现在,您可以在队列的列表下看到 QM_TheBus(图 14)。


    图 14. 队列列表
    图 14. 队列列表

定义发送方通道

  1. 展开 QM_reinitz => Advanced

  2. 右键单击 Channels,然后选择 New => Sender channel

  3. Create Sender Channel 对话框中,选择 General 选项卡(图 15)

  4. 输入或选择下列值:

    • Channel Name:MQToBus(该名称必须是在定义 MQ 链接上的接收方队列时所使用的正确名称)
    • Transmission Protocol:TCP/IP
    • Connection Name:运行 SIBus(端口)的计算机的主机名。对于缺省的独立的 WebSphere Application Server 安装,该值为 localhost(5558)。
    • Transmission Queue:QM_TheBus

    选择 OK


    图 15. 创建 Sender Channel 对话框
    图 15. 创建 Sender Channel 对话框
  5. 展开 Explorer 通道窗口以显示 MQToBus 通道的状态;它最有可能是不活动状态。右键单击新创建的 MQToBus 通道,然后选择 Start

  6. 大约一分钟后,从上下文菜单中选择 Refresh。您应该看到状态更改为 Running(图 16)。


    图 16. 检查通道状态
    图 16. 检查通道状态

定义接收方通道

  1. 右键单击 Channels,然后选择 New => Receiver Channel

  2. 在 Create Receiver Channel 对话框中,选择 General 选项卡(图 17)。

  3. 输入或选择以下值:

    • Channel Name:busToMQ(该名称必须是在定义 MQ 链接上的发送方队列时所使用的正确名称)
    • Transmission Protocol:TCP/IP

    对于接收,不需要连接名称和传输队列;缺省情况下使用连接名称和传输队列。


    图 17. 创建 Receiver Channel 对话框
    图 17. 创建 Receiver Channel 对话框

不需要启动接收方通道 busToMQ;当将请求接收到接收方通道时,会自动启动它。您将看到定义在 WebSphere MQ 中的两个通道,如图 18 所示。


图 18. WebSphere MQ 队列
图 18. WebSphere MQ 队列

现在,我们已经完成了将 TheBus 连接到 WebSphere MQ 的步骤。接下来,我们将逐步研究如何将消息从 WebSphere MQ 发送到 SIBus。


消息传递测试实用工具

可以采用几种方式将消息放入 WebSphere MQ 并从中读取消息以进行测试。我们特别喜欢的一种方式是将前面提到的免费实用工具 rfhutil 用作 WebSphere MQ 支持包。可以从 IBM Software Support 页面下载这一工具。只需解压缩下载的 ZIP 文件并运行 rfhutil.exe 即可。在本文的所有剩余部分中,我们将使用此实用工具来查看和删除队列中的消息,并且将消息放入 WebSphere MQ 队列。由于我们需要查看目的地在测试的过程中接收到的消息,因此我们将把记录中介(请参见侧栏)分配给需要监视的目的地。

将消息从 SIBus 发送到 WebSphere MQ

在这一文章系列的第 3 部分中,我们实现了一个简单的 JMS 客户机将包传递确认消息发送到目的地。由消息驱动的 Bean (MDB) 读取此消息,然后对此消息进行处理。作为 Posts-R-Us ESB 策略的一部分,企业现在正在改变将传输确认传递到其 CICS 后端系统的方式:它们将不使用在生产系统中对 CICS 进行 JCA 调用的 MDB,而是使用用于与 CICS 进行来回通信的 WebSphere MQ。

我们将修改第 3 部分的配置,以便它现在将消息转发到 WebSphere MQ。

  1. 如果您已经具有第 3 部分中 JMS 示例的设置,那么需要禁用 MDB 以阻止读取发送到总线的消息。可以通过更改 MDB 的 activationSpec,或停止 EAR 文件来完成这一操作。如果不具有 JMS 设置,则遵循第 3 部分中的步骤 1 到步骤 12 设置目的地;由于我们不准备使用 MDB,因此不需要 activationSpec。对于要将消息发送到目的地的 JMS 客户机而言,您的设置需要包含 PackageReceivedDestination 和 JMS 实体。

  2. (可选)为了最大化进程的可见性,并有助于调试,请遵循第 4 部分中的指导安装 LoggingMediationRevised(而非 LoggingMediation),并将 LoggingMediationRevised 分配给 PackageReceivedDestination。

  3. (可选)遵循任何一篇文章(第 3 部分或第 4 部分)中的指导,使 JMS 客户机将消息发送到目的地,并确认是否在 SystemOut.log 中记录了此消息。

在 WebSphere MQ 中创建队列以接收来自总线的消息

我们需要在 WebSphere MQ 中创建队列来接收来自总线的消息。在生产环境中,后端系统接着将读取此队列的消息。在我们的测试环境中,我们将使用 rfhutil 实用工具读取消息。

  1. 在 WebSphere MQ Explorer 中,导航到 WebSphere MQ => QM_reinitz => Queues

  2. 右键单击 Queues,然后选择 New => Local Queue

  3. 在 Create Local Queue 对话框中,选择 General 选项卡(图 19)。

  4. 对于 Queue Name,输入 DeliveryConfirmationQueue,然后选择 OK


图 19. 创建 Local Queue 对话框
图 19. 创建 Local Queue 对话框

您应该看到下列队列目的地:


图 20. 队列目的地
图 20. 队列目的地

创建外部目的地以将消息从总线发送到 WebSphere MQ

在总线中,我们需要创建外部目的地,它在 WebSphere MQ 中是一个虚拟地址。因为外部目的地在 WebSphere MQ 中表示一个端点,所以不能对其附加中介。

  1. 在 WebSphere Application Server 管理控制台中,选择 Buses => TheBus => Destinations

  2. 选择 New

  3. 选择 Foreign

  4. 选择 Next

  5. 步骤 1:设置外部目的地属性。输入或选择下列值(图 21):

    • Identifier:DeliveryConfirmationQueue@QM_reinitz(WebSphere MQ 中的队列)
    • Bus:TheForeignBus(消息所发送到的总线)

    选择 Next


    图 21. 步骤 1:设置外部目的地属性
    图 21. 步骤 1:设置外部目的地属性
  6. 步骤 2:确认外部目的地的创建。选择 Finish,然后选择 Save。您应该具有如图 22 所示的目的地。


    图 22. 目的地列表
    图 22. 目的地列表

完成路由和测试

现在,我们需要从第 3 部分中的目的地(JMS 客户机调用此目的地)和我们刚才创建的外部目的地进行路由。

  1. 从目的地列表(图 22)中选择 PackageReceivedDestination。

  2. 设置 Default 将路由路径转发到 TheForeignBus: DeliveryConfirmationQueue@QM_reinitz

  3. 分别选择 OKSave

  4. 重新启动服务器。现在,我们准备测试从 JMS 客户机到 WebSphere MQ 的消息传递。

  5. 运行命令提示符中的 JMS 客户机:
    launchclient packagedReceivedClient.ear

  6. (可选)检查 SystemOut.log 文件以从 PackageReceivedDestination 上的记录中介输出。

  7. 运行 rfhutil.exe

  8. 选择队列管理器 QM_reinitz

  9. 选择队列 DeliveryConfirmationQueue

  10. 选择 Read Q

  11. 您应该看到如图 23 所示的队列上的消息。


    图 23. 传递确认
    图 23. 传递确认

您也可以检查 SystemOut.log 文件来查看 PackageReceivedDestination 上的记录中介的输出:

SystemOut  O Message logged. The payload of the message is Package Received - 24595023

将消息从 WebSphere MQ 发送到 SIBus

在本系列的第 5 部分中,我们创建了一个包(跟踪在 ESB 上可用的 Web 服务)来支持各种要求跟踪数据的包的客户机应用程序。所需的一种访问是通过 WebSphere MQ。在本示例中,发出请求的系统不支持 SOAP,因此,它将通过 WebSphere MQ 将 SOAP 消息的 XML 主体发送到总线。(在本系列以后的文章中,我们将介绍如何将这种 XML 消息转换为 SOAP 消息。)目前,我们将重点放在从总线上的 WebSphere MQ 获取消息。

创建总线目的地以从 WebSphere MQ 接收消息

我们需要创建总线目的地来接收放在 WebSphere MQ 中的远程队列中的消息。该目的地将成为常规队列目的地。

  1. 从 WebSphere 管理控制台中,选择 Buses => TheBus => Destinations

  2. 选择 New

  3. 选择 Queue

  4. 选择 Next

  5. 步骤 1:设置队列属性。对于 Identifier,选择 PackageTrackingFromMqDestination,然后选择 Next

  6. 步骤 2:将队列分配给总线成员。选择 node1:server1,然后选择 Next

  7. 步骤 3:确认队列的创建。选择 Finish

  8. 要知道消息是否到达总线上的目的地,请遵循第 4 部分中的指导安装 LoggingMediationRevised(而非 LoggingMediation),然后将其分配给 PackageTrackingFromMqDestination

  9. 保存。

您应该具有图 24 中所列出的目的地。(如果在同一台服务器上具有第 3 部分或第 5 部分中的设置,那么将会看到所列出的其他目的地。)


图 24. 目的地列表
图 24. 目的地列表

创建远程队列以将消息从 WebSphere MQ 发送到总线

  1. 在 WebSphere MQ Explorer 中,展开 WebSphere MQ => QM_reinitz => Queues

  2. 右键单击 Queues,然后选择 New => Remote Queue Definition

  3. 在 Create Remote Queue Definition 对话框中,选择 General 选项卡(图 25)。

  4. 输入或选择下列值:

    • Queue Name(本地 WMQ Queue Manager):PackageTrackingRequestRemoteQueue
    • Remote Queue Name(WebSphere Application Server 中的队列目的地):PackageTrackingFromMqDestination
    • Remote Queue Manager Name:QM_TheBus(WebSphere MQ 将总线称为此名称;当创建 MQ 链接时指定此名称)
    • Transmission Queue Name:QM_TheBus(在创建发送方通道以便将消息从 MQ 发送到总线时,您创建了一个传输队列;这里,传输队列的名称恰好与远程队列管理器的名称相同。)

    选择 OK


图 25. Create Remote Queue Definition 对话框
图 25. Create Remote Queue Definition 对话框

创建队列之后,将看到图 26 所示的列表。


图 26. 队列列表
图 26. 队列列表

使用远程队列测试将消息从 WebSphere MQ 发送到总线

当测试将消息发送到 SIBus 时,您可能需要采用一种方式删除总线中的消息。导航到 Buses => TheBus => Destinations => PackageTrackingFromMqDestination => Queue Points => node1.server1-TheBus => Messages。您可以看到发送到目的地的消息的详细情况,您还可以删除单个或所有消息。这是使用 LoggingMediationRevised 查看从 WebSphere MQ 发送的消息的一种可供选择的方式。

我们的示例应用程序(包含请求特定 trackingNumber 的包状态所需的代码)包含了 XML 文件。我们将使用文件 track123.xml 来测试将消息从 WebSphere MQ 发送到总线目的地。

请记住:WebSphere MQ 中的 MQToBus 通道必须在运行。如果重新启动计算机、WebSphere MQ 或 WebSphere Application Server,就可能得重新启动通道。因此通道应该处于运行状态。

要将消息放入远程 WebSphere MQ 队列 PackageTrackingRequestRemoteQueue 中,我们将使用 rfhutil:

  1. 运行 rfhutil.exe

  2. 选择 Main 选项卡(图 27)。


    图 27. 运行 rfhutil 实用工具,Main 选项卡
    图 27. 运行 rfhutil 实用工具,Main 选项卡
  3. 输入或选择下列值:

    • Queue Manager Name:QM_reinitz
    • Queue Name:PackageTrackingRequestRemoteQueue

    选择 Read File 以加载 track123.xml 的内容。

  4. 要查看文件的内容,请选择 Data 选项卡(图 28),然后选择 XML 作为数据格式。


    图 28. 运行 rfhutil 实用工具,数据选项卡
    图 28. 运行 rfhutil 实用工具,数据选项卡
  5. 返回到“Main”选项卡(图 27),然后选择 Write Q

  6. 在 WebSphere Application Server Systemout.log 文件中,您应该看到来自 LoggingMediationRevised 中介的输出:

    SystemOut     O Message logged. The payload of the message is <?xml version="1.0" encoding="UTF-8"?>
    123

结束语

在这一文章系列的第 6 部分中,我们描述了 WebSphere Application Server V6 Message Resources 中对使用 WebSphere MQ 交换消息的支持。我们一步一步演示了如何设置 SIBus 和 WebSphere MQ 之间的连接性、如何测试将消息从 MQ 发送到 SIBus,以及如何测试将消息从 SIBus 发送到 MQ。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14789789/viewspace-426901/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14789789/viewspace-426901/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值