如何在IBM MQ中重置队列?

时间:2013-04-29 22:18:23

标签: c# ibm-mq

如何重置队列?在开始将消息写入队列之前,我想清除队列中的所有消息。有没有办法可以在不拨打电话的情况下重置?

MQQueueManager mqQMgr = new MQQueueManager(mqQueueManager);
MQQueue queue = mqQMgr.AccessQueue(getMessageQueue, MQC.MQOO_OUTPUT | MQC.MQOO_INPUT_SHARED | MQC.MQOO_INQUIRE);

MQMessage对象中有一个.clearmessages,但我只能在调用get方法时访问它,我正在寻找一种方法来清除队列中的现有消息,然后才能将新消息放入队列

4 个答案:

答案 0 :(得分:3)

队列中的消息只能通过Get调用以编程方式清除。没有其他办法。或者,您可以使用管理控制台清除消息,但这不是您要查找的内容。

MQMessage.ClearMessage()会丢弃消息缓冲区中的所有数据,并将数据偏移量设置为零。它不会清除驻留在队列中的所有消息。

我可以问你为什么要在发新消息之前清除队列?你想解决什么问题?

答案 1 :(得分:0)

我有几个你可以使用的程序:

答案 2 :(得分:0)

要清除队列中的消息,您可以使用“清除队列”PCF命令。据我所知,它比GET调用更快地清除队列,但您只能在关闭的队列中使用它。您可以在IBM MQ信息中心中阅读它:http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzac.doc/pc11350_.htm

答案 3 :(得分:0)

也许这会有所帮助!

 private Color[] FloodTest(Color[] color, TouchLocation touch, Texture2D tex)
    {

        Queue<Point> q = new Queue<Point>();
        q.Enqueue(pt);
        while (q.Count > 0)
        {
            if (q.Count > 800000) break; 
        }

        q.Clear();
        q = null;
        return color;
    }

我删除了不重要的代码。请看q.Count。