【问题标题】:Using Websphere MQ QueueDepth with a clustered queue将 Websphere MQ QueueDepth 与集群队列一起使用
【发布时间】:2016-05-05 03:03:18
【问题描述】:

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

我的代码在开发方面运行良好,但是当它进入 QA 时,它开始以 CompCode: 1, Reason: 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
}

【问题讨论】:

    标签: c# message-queue ibm-mq


    【解决方案1】:

    您需要应用程序连接的队列管理器中存在集群队列的本地实例,以查询队列深度。如果不存在本地实例,则可以查询很少的属性,如 here 所记录的那样 - 查看使用说明的 #4。

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

    【讨论】:

    • 谢谢。我与服务器管理器讨论,我们确定无论如何都没有理由将队列集群化,因此我们以这种方式进行了修复。
    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2010-11-12
    • 2012-07-16
    相关资源
    最近更新 更多