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

本文关键字:队列 删除 消息 MQListener IBM | 更新日期: 2023-09-27 18:16:38

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

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

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

openOptions = MQC.MQOO_BROWSE  // open queue for browsing

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

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

它将使处理更快,您可以为每个队列设置一个侦听器。