【问题标题】:IBM WebSphere MQ - how do I read only MQMT_REQUEST messagesIBM WebSphere MQ - 我如何只读取 MQMT_REQUEST 消息
【发布时间】:2011-12-02 02:13:41
【问题描述】:

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

  1. 它是 Web 应用程序的 WebSphere MQ 的代理,它要求其他 系统 - 它发送请求和第二个系统回复。
  2. 它是一个应该响应其他系统请求的服务器 - 其他系统发送请求,服务响应。

在场景 1 中,我正在等待具有特定相关 ID 的响应。但是,在场景 2 中,我正在等待任何作为请求的消息。如何避免读取场景 2 的响应并将其视为场景 2 中的请求的情况?我想将我在方案 2 中阅读的消息过滤为消息类型为 MQMT_REQUEST 的消息。

提前感谢您的帮助。

【问题讨论】:

    标签: c# .net ibm-mq


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我不能这样做。我有一个输入队列和一个输出队列。我无法更改此配置。
    • 你知道如何设置选择器吗?我在 .NET 中找不到任何信息。
    • 无法更改此配置。当我在同一个队列中收到请求和回复时,我需要找到解决方案。
    • 我会请Shashi回复有关选择器的问题。也就是说,是什么限制您使用一个队列?如果您有权访问设置选择器,那么您没有使用供应商提供的代码。添加队列的唯一成本是管理成本。在您的组织中,添加队列真的比使用复杂的应用程序代码解决管理障碍要贵得多吗?
    • 我的客户有这种配置。我正在使用标准 MQ API。我没有使用 XMS。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      相关资源
      最近更新 更多