IBM WebSphere MQ—如何仅读取MQMT_REQUEST消息

本文关键字:MQMT REQUEST 消息 读取 何仅 WebSphere MQ IBM | 更新日期: 2023-09-27 18:16:44

我正在开发有两个目的的windows服务。

  1. 它是请求其他web应用程序的webspheremq的代理系统——它发送请求,第二个系统回复。
  2. 是响应其他系统请求的服务器——其他系统发送请求,服务响应。

在场景1中,我正在等待具有特定关联ID的响应。但是,在场景2中,我正在等待作为请求的任何消息。我怎样才能避免这样的情况:我将从场景2中读取响应,并将其视为场景2中的请求?我想将场景2中读取的消息过滤为消息类型为MQMT_REQUEST的消息。

提前感谢您的帮助。

IBM WebSphere MQ—如何仅读取MQMT_REQUEST消息

使用两个不同的输入队列。就程序逻辑和WMQ索引而言,当存在混合消息类型时,从队列中选择正确消息的开销要比简单地创建两个队列大得多。

通常在面向服务的体系结构中,服务端点队列是已知的,而应答队列是动态的,或者至少是未知的,因为服务提供者只需要查看应答字段以获取返回地址。在这种情况下,您的应用程序既是服务提供者又是服务使用者。它用作其提供的服务的端点的队列应该是一个众所周知的队列,它的所有客户机都将消息发送到该队列。它用于响应其服务请求的队列应该是一个完全不同的队列。

一个很好的例子是,在增强服务以为新版本提供不同的端点队列时,这是很常见的。例如,根据帐号返回客户名称的服务可能位于队列SVC.CUST.LOOKUP.V01上。如果业务增强,则可以在SVC.CUST.LOOKUP.V02上提供新版本。然后,服务的请求者能够按照自己的调度从V1队列迁移到V2队列,而不是要求它们全部同时转换。

在这种情况下,您肯定不希望应用程序的应答队列与其服务端点队列相关联。两者服务于完全不同的功能,服从于完全不同的变更控制和增强时间表,等等。

如果是相同的服务,则在一个地方(可能是主循环)从队列中读取消息,当消息到达时检查其相关ID并查看它是否是场景1响应。根据测试决定执行哪个处理。