博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在 SIBus 和 WebSphere MQ 之间进行简单的消息交换
阅读量:2494 次
发布时间:2019-05-11

本文共 9603 字,大约阅读时间需要 32 分钟。

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

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

不管 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. 消息传递引擎

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

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

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

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

有关这些总线组件的详细信息,请参见 。

图 2. SIBus 组件 

为了使您能概括地了解这一部分所涉及的内容,下面总结了在 SIBus (TheBus) 和 WebSphere 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 主机名和端口建立通信。

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

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

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

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

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

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

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

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

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

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

  3. 选择 TheBus

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

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

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

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

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

  9. 分别单击 Finish Save

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

    图 6. 外部总线列表

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

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

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

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

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

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

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

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. 创建新队列
  2. 右键单击 Queues,然后选择 New => Local Queue

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

  4. 输入或选择以下值:

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

    选择 OK

    图 13. 创建 Local Queue 对话框

    现在,您可以在队列的列表下看到 QM_TheBus(图 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 对话框
  5. 展开 Explorer 通道窗口以显示 MQToBus 通道的状态;它最有可能是不活动状态。右键单击新创建的 MQToBus 通道,然后选择 Start

  6. 大约一分钟后,从上下文菜单中选择 Refresh。您应该看到状态更改为 Running(图 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 对话框

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

图 18. WebSphere MQ 队列

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

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

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

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

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

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

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

我们需要在 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 对话框

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

图 20. 队列目的地

在总线中,我们需要创建外部目的地,它在 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:设置外部目的地属性
  6. 步骤 2:确认外部目的地的创建。选择 Finish,然后选择 Save。您应该具有如图 22 所示的目的地。

    图 22. 目的地列表

现在,我们需要从中的目的地(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. 传递确认

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

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

在本系列的中,我们创建了一个包(跟踪在 ESB 上可用的 Web 服务)来支持各种要求跟踪数据的包的客户机应用程序。所需的一种访问是通过 WebSphere MQ。在本示例中,发出请求的系统不支持 SOAP,因此,它将通过 WebSphere MQ 将 SOAP 消息的 XML 主体发送到总线。(在本系列以后的文章中,我们将介绍如何将这种 XML 消息转换为 SOAP 消息。)目前,我们将重点放在从总线上的 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. 要知道消息是否到达总线上的目的地,请遵循中的指导安装 LoggingMediationRevised(而非 LoggingMediation),然后将其分配给 PackageTrackingFromMqDestination

  9. 保存。

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

图 24. 目的地列表

  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 对话框

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

图 26. 队列列表

当测试将消息发送到 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 选项卡
  3. 输入或选择下列值:

    • Queue Manager Name:QM_reinitz
    • Queue Name:PackageTrackingRequestRemoteQueue

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

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

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

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

    SystemOut     O Message logged. The payload of the message is 
    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/

你可能感兴趣的文章
SpringBoot+MybatisPlus实现批量添加的两种方式
查看>>
vue 设计结构
查看>>
Sqlerver2005+按照ID分组取前几条
查看>>
Python的编码和解码
查看>>
docker
查看>>
停车场系统安全岛设计施工要求
查看>>
Docker实战
查看>>
asp.net core结合Gitlab-CI实现自动化部署
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.7 版本发布
查看>>
EasyNVR H5无插件摄像机直播解决方案前端解析之:关于直播页面和视频列表页面切换的问题...
查看>>
django搭建一个小型的服务器运维网站-拿来即用的bootstrap模板
查看>>
redis事务
查看>>
Java_基础语法之dowhile语句
查看>>
HDU 2175 汉诺塔IX
查看>>
PAT 甲级 1021 Deepest Root
查看>>
查找代码错误.java
查看>>
vc获取特殊路径(SpecialFolder)
查看>>
单例模式
查看>>
int(3)和int(11)区别
查看>>
201521123061 《Java程序设计》第十一周学习总结
查看>>