如何重置IBM MQ中的队列

本文关键字:队列 MQ 何重置 IBM | 更新日期: 2023-09-27 18:11:20

如何重置队列?在开始将消息写入队列之前,我想清除队列中的所有消息。有没有办法不调用get就能重置?

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

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

如何重置IBM MQ中的队列

队列中的消息只能通过Get调用被编程清除。没有别的办法。或者,您可以使用管理控制台来清除消息,但这不是您想要的。

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

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

要从队列中清除消息,可以使用'Clear queue ' PCF命令。据我所知,它清除队列的速度比GET调用快,但是您只能在关闭的队列上使用它。您可以在IBM MQ Infocenter中了解它:http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzac.doc/pc11350_.htm

我有几个程序可以使用:

  • ClearQ是一个发出MQSC ClearQ命令的C程序,但它只会在没有应用程序打开队列(ClearQ命令的限制)的情况下工作。ClearQ程序可以在这里找到:http://www.capitalware.biz/mq_code_c.html

  • EmptyQ是一个Java程序,它使用MQGET顺序地从队列中删除所有消息。EmptyQ可以在这里找到:http://www.capitalware.biz/mq_code_java.html

也许这会有帮助!

 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;
    }

我删除了不重要的代码。