【问题标题】:IBM MQListener Not Automatically Remove Message From QueueIBM MQListener 不会自动从队列中移除消息
【发布时间】:2015-10-07 19:24:25
【问题描述】:

我正在使用 .Net 侦听来自 IBM MQ 的消息。当它看到一条消息时,它会自动从队列中删除该消息。我想先检查消息的架构。如果它不是我正在寻找的正确模式,我想将它保留在队列中。

如何更改代码以在找到消息时不自动从队列中删除消息?

 int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING;
        IBM.WMQ.MQQueueManager mqManager = new IBM.WMQ.MQQueueManager(qmName);

        MQQueue queue = mqManager.AccessQueue(queueName, openOptions);

        MQGetMessageOptions gmo = new MQGetMessageOptions();
        gmo.Options = MQC.MQGMO_FAIL_IF_QUIESCING | MQC.MQGMO_WAIT;
        gmo.WaitInterval = MQC.MQWI_UNLIMITED;


        queue.Get(message, gmo);

        //Only remove message from the queue if a schema check of the message has passed

【问题讨论】:

    标签: c# ibm-mq mq


    【解决方案1】:

    您可以浏览消息以查看它是否是您需要的,然后如果您确定它是,则执行 GET。 GET 是破坏性的,会从队列中删除消息,browse 不是破坏性的,但可以让您检查内容。

    openOptions = MQC.MQOO_BROWSE  // open queue for browsing
    

    【讨论】:

      【解决方案2】:

      像分发糖果一样分发队列要好得多。如果有 5 种不同类型的模式可以进入原始队列,那么您应该只使用 5 个队列。

      • ABC.SOMTHING.SHEMA.A
      • ABC.SOMTHING.SHEMA.B
      • ABC.SOMTHING.SHEMA.C
      • ABC.SOMTHING.SHEMA.D
      • ABC.SOMTHING.SHEMA.E

      这将加快处理速度,每个队列可以有 1 个侦听器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-25
        • 1970-01-01
        • 2015-11-05
        • 2016-04-29
        • 2022-06-10
        • 2012-08-27
        相关资源
        最近更新 更多