【问题标题】:Confusion about MQ Put options (IBM MQ)对 MQ Put 选项的困惑 (IBM MQ)
【发布时间】:2022-02-04 05:58:30
【问题描述】:

我正在尝试了解一些 IBM MQ 看跌期权:

我已使用https://www.ibm.com/docs/en/ibm-mq/9.2?topic=interfaces-mqputmessageoptionsnet-class 来记录文档。

  1. MQPMO_ASYNC_RESPONSEMQPMO_SYNC_RESPONSE 似乎实际上是互斥的,但是这些选项具有不同的 ID(第 12 位和第 13 位)。当两个选项都设置或都没有设置时,MQ 会做什么?

  2. t 似乎 MQPMO_SYNCPOINTMQPMO_NO_SYNCPOINT 实际上是互斥的,但这些选项具有不同的 ID(位 2 和位 3)。当两个选项都设置或都没有设置时,MQ 会做什么?

  3. MQPMO_RESPONSE_AS_Q_DEF 让我更加困惑。正如我从文档中了解到的那样,这一位将同步或异步请求的控制推迟到队列定义。因此忽略使用MQPMO_ASYNC_RESPONSEMQPMO_SYNC_RESPONSE 设置的选项。但是文档说明了以下内容

对于 MQDestination.put 调用,此选项从队列的 DEFPRESP 属性中获取 put 响应类型。 对于 MQQueueManager.put 调用,此选项会导致同步进行调用。

DEFRESPhttps://www.ibm.com/docs/en/ibm-mq/9.1?topic=queues-defpresp-mqlong 的文档说明了这一点:

当 MQPMO 中的 PutResponseType 设置为 MQPMO_RESPONSE_AS_Q_DEF 时,默认放置响应类型 (DEFPRESP) 属性定义应用程序使用的值。该属性对所有队列类型都有效。

值为以下之一:

  • 同步 同步发出 put 操作并返回响应。
  • 异步 put 操作是异步发出的,返回 MQMD 字段的子集。

但其他文档说设置此选项会使调用同步。

简而言之:看似相互排斥的选项会发生什么,MQPMO_RESPONSE_AS_Q_DEF 的真正作用是什么?

【问题讨论】:

    标签: ibm-mq


    【解决方案1】:

    如果您组合了不应组合的选项标志,例如 MQPMO_SYNCPOINTMQPMO_NO_SYNCPOINT,您将在 MQPUT 调用上返回 MQRC_OPTIONS_ERROR。您可以在 IBM Docs here 中查看相关文档。

    您是对的,MQPMO_RESPONSE_AS_Q_DEF 的使用告诉队列管理器从队列属性 DEFPRESP 中获取 Put Response 的值。队列管理器将查找队列定义,如果是SYNC,它将有效地使用MQPMO_SYNC_RESPONSE,如果是ASYNC,它将有效地使用MQPMO_ASYNC_RESPONSE

    您向我们指出的文档如下:-

    MQC.MQPMO_RESPONSE_AS_Q_DEF

    对于 MQDestination.put 调用,此选项从队列的 DEFPRESP 属性中获取 put 响应类型。

    对于 MQQueueManager.put 调用,此选项会导致同步进行调用。

    我不知道为什么它会根据所使用的类而有所不同,但我可以告诉你,如果 MQPMO_RESPONSE_AS_Q_DEF 进入队列管理器,它将如上所述进行更改。该文档表明 MQQueueManager 类正在对其自身进行更改,这是一个奇怪的决定。

    【讨论】:

    • 另外有趣的是 MQPMO_RESPONSE_AS_Q_DEF 的值为 0,所以“设置”它与不设置它是一样的,这也意味着 MQPMO_RESPONSE_AS_Q_DEF+MQPMO_ASYNC_RESPONSE 或 MQPMO_RESPONSE_AS_Q_DEF+MQPMO_SYNC_RESPONSE 不会出错并且会表现好像没有指定 MQPMO_RESPONSE_AS_Q_DEF。
    • @JoshMc 很多默认选项都是这样的。
    • 我知道你知道,但认为 OP 会感兴趣并且可能不知道。
    • @JoshMc - 确实 - 但 OP 可能对它也不是特定于 PutResponse 选项感兴趣。
    • 是的@WilkovanderVeen MQPUT 动词可用于将消息放入队列并将消息发布到主题。将其视为 IBM MQ 的 send 动词。许多MQPMO 选项适用于这两种风格(这就是为什么两者都使用相同的动词)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2012-10-01
    相关资源
    最近更新 更多