IBM WebSphere MQ - 我如何只读取MQMT_REQUEST消息

时间:2011-12-01 17:11:48

标签: c# .net ibm-mq

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

  1. 它是Web MQ应用程序的WebSphere MQ的代理,它要求其他人 系统 - 它发送请求和第二个系统回复。
  2. 服务器应响应其他系统请求 - 其他系统发送请求,服务响应。
  3. 在方案1中,我等待具有特定相关ID的响应。但是,在方案2中,我等待任何请求的消息。如何避免我将从方案2中读取响应并将其视为方案2中的请求的情况?我想将我在场景2中阅读的消息仅过滤到消息类型为MQMT_REQUEST的消息。

    提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

如果它是相同的服务,在一个地方读取队列中的消息(可能是你的主循环,对吗?),当消息到达时检查其相关ID并查看它是否是一个方案1响应。根据该测试确定要执行的处理。