将 Websphere MQ QueueDepth 与集群队列结合使用

本文关键字:队列 结合 Websphere MQ QueueDepth | 更新日期: 2023-09-27 18:32:08

我有一个 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
}

将 Websphere MQ QueueDepth 与集群队列结合使用

您将需要应用程序连接到的队列管理器中存在的集群队列的本地实例来查询队列深度。如果不存在本地实例,则可以查询很少的属性,如此处所述 - 在用法说明的 #4 下查看。

从 v701 开始,MQ 提供了集群队列监控实用程序 AMQSCLM,它可以监控集群队列,并在消息未被使用时将消息路由到其他集群队列。您可以看一下此实用程序。示例代码可用于该实用程序,因此您可以对其进行自定义。