【问题标题】:IBM MQ issue with cluster queueIBM MQ 集群队列问题
【发布时间】:2018-07-09 01:55:24
【问题描述】:

无法将消息放入远程队列管理器上的集群队列。我正在使用 MQGetMessageOptions 和 MQPutMessageOptions。我正在使用 7.5 MQ 服务器和客户端 (7.5.0.1)

它抛出原因代码 - 2085- message -CompCode: 2, Reason: 2085

队列和队列管理器使用 MQ 集群连接。

 mqQueue = mqQueueMgr.AccessQueue("queue name", MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_INPUT_SHARED | MQC.MQOO_BROWSE);

我尝试使用 amqsput.exe 放置测试消息,它在那里工作正常。

有什么想法吗?

【问题讨论】:

    标签: c# ibm-mq


    【解决方案1】:

    这个电话:

    mqQueue = mqQueueMgr.AccessQueue("queue name", MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_INPUT_SHARED | MQC.MQOO_BROWSE);
    

    打开集群队列以获取消息。要获取消息,应用程序必须连接到本地队列管理器。本地队列管理器是指您的应用程序连接到的队列管理器。队列管理器可以与您的应用程序在同一台机器上,也可以在不同的机器上。无法从远程队列管理器获取消息。当应用程序连接到集群中与托管集群队列的队列管理器不同的队列管理器时,可以将消息放入集群队列。

    AMQSPUT 有效,因为它为 Put 而不是 Get 打开队列。

    所以要解决您的问题,必须将选项更改为:

    mqQueue = mqQueueMgr.AccessQueue("queue name", MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_OUTPUT);
    

    【讨论】:

    • 谢谢,我可以在末尾添加 MQC.MQOO_OUTPUT,如下所示,而不是删除其他条目(这样这将适用于本地和集群队列)? mqQueue = mqQueueMgr.AccessQueue("队列名称", MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_INPUT_SHARED | MQC.MQOO_BROWSE | MQC.MQOO_OUTPUT);
    • 没有。如果添加 MQC.MQOO_OUTPUT,它仍然会失败。您必须删除 INPUT_SHARED 和 BROWSE 选项。要从集群队列应用程序获取消息,必须将其连接到托管集群队列的队列管理器。
    • 这是我发送消息的方法 mqQueue = mqQueueMgr.AccessQueue("队列名称", MQC.MQOO_OUTPUT | MQC.MQOO_INPUT_SHARED | MQC.MQOO_INQUIRE);我需要更改以上任何内容吗?
    • 您必须删除 INPUT_SHARED 和 INQUIRE 选项才能放置消息。只要有 MQOO_OUTPUT 和 MQOO_FAIL_IF_QUIESCING。这适用于本地队列和集群队列。
    【解决方案2】:

    试试

      MQQueue queue = queueManageArg.AccessQueue(queueNameArg,
                    MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING);
    

    向MQ发送消息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2021-01-03
      • 1970-01-01
      相关资源
      最近更新 更多