将Websphere MQ QueueDepth与群集队列

时间:2016-01-27 22:47:21

标签: c# message-queue ibm-mq

我有一个C#应用程序需要定期检查队列的深度,然后可能会确定新入站消息的某些行为。 (基本上,当我们在队列中有较长的深度并且满足其他一些资格时,需要将某些消息设置为更高的优先级,以确保它们得到及时处理。)

我的代码在开发方面运行良好,但是当它进入QA时,它开始使用CompCode失败:1,原因:2068。我的研究似乎表明这意味着有问题的队列聚集在QA环境中,并且我的请求对于群集队列无效。

我对Websphere界面不太熟悉,所以我希望有人可以帮我弄清楚如何做到这一点。

以下是我现在称之为的方式:

try
{
    MQQueueManager mqManager = new MQQueueManager(queueManager);
    MQQueue mqQueue = mqManager.AccessQueue(queueName, MQC.MQOO_OUTPUT + MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING);
    int depth = mqQueue.CurrentDepth;
    mqQueue.Close();
    mqManager.Disconnect();
    return depth;
}
catch (Exception ex)
{
    //there's lots of irrelevant handling here
}

1 个答案:

答案 0 :(得分:0)

您将需要应用程序连接到的队列管理器中存在的群集队列的本地实例来查询队列深度。如果没有本地实例,则可以按照文档here查询很少的属性 - 查看使用说明的#4。

从v701开始,MQ发布了群集队列监视实用程序AMQSCLM,它可以监视群集队列,并在消息未被消耗时将消息路由到其他群集队列。您可以查看此实用程序。示例代码可用于该实用程序,因此您可以自定义它。