IBM MQListener不会自动从队列中删除消息

时间:2015-10-07 19:24:25

标签: c# ibm-mq mq

我正在使用.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

2 个答案:

答案 0 :(得分:2)

您可以浏览消息以查看它是否是您需要的消息,然后在确定消息时执行GET操作。 GET具有破坏性并从队列中删除消息,浏览不具有破坏性,但允许您检查内容。

openOptions = MQC.MQOO_BROWSE  // open queue for browsing

答案 1 :(得分:0)

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

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

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