2011-12-01 117 views
1

我正在开发有两个用途的Windows服务。IBM WebSphere MQ - 如何只读取MQMT_REQUEST消息

  1. 这是一个代理到WebSphere MQ为web应用,询问其它 系统 - 它发送请求和第二系统的答复。
  2. 是一个服务器应该响应其他系统请求 - 其他系统发送请求,服务响应。

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

在此先感谢您的帮助。

回答

2

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

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

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

您肯定会而不是希望您的应用程序的回复队列在此情况下与其服务端点队列相关联。两个发球局完全不同的功能,都受到了完全不同的变更控制和增强时间表等

+0

我不能这样做。我有一个输入队列和一个输出队列。我无法更改此配置。 – empi

+0

你知道我该如何设置选择器吗?我无法找到任何信息如何在.NET中做到这一点。 – empi

+0

无法更改此配置。当我在同一队列中收到请求和回复时,我需要找到解决方案。 – empi

0

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