【问题标题】:Can we check the queue depth using a scripting language?我们可以使用脚本语言检查队列深度吗?
【发布时间】:2012-08-15 23:15:29
【问题描述】:

使用任何脚本检查队列深度(MQ)是否可行? [对语言没有限制]。该计划是研究非 Java 解决方案。

我确实知道使用 MQQueueManager 在 Java 中是可以实现的,但这需要使用客户端 API。因此,检查任何替代选项或更好的做法。

http://www.capitalware.biz/mq_code_perl_python.html 的 InquireQueue 看起来很相似[但看起来有点过时]

【问题讨论】:

    标签: java perl bash shell ibm-mq


    【解决方案1】:

    如果您在 linux 上使用 MQM 用户登录并希望快速检查其中包含消息的队列 .. 这是一个快速修复 ..

    echo "dis ql(*) CURDEPTH" | runmqsc <QMGRNAME> | grep -v '(0' | grep -v 'AMQ'
    

    这将为您提供命令行输出,如果需要,您可以直接在 crontab 中安排相同的命令(无需为其保存脚本)

    我知道它并不整洁,但可能是最快的解决方案。

    【讨论】:

      【解决方案2】:

      perl mqseries 非常完整。下面是一些示例代码。 (该示例的部分功劳可能归功于其他人,但它多年来一直在我的驱动器上浮动。)代码连接到命令行指定的队列管理器,如果未提供,它将连接到默认队列经理。然后它会查询传入的队列名称,特别是该队列的当前深度。这显示给用户。可以轻松修改此代码以显示其他队列属性。此外,MQINQ 可用于查询其他对象的属性,而不仅仅是队列。这里是子集示例代码:

      use MQSeries;
      
      my $quename = $ARGV[0];
      my $quemgrname = $ARGV[1];
      
      my $Hconn = MQCONN($qmgrname, $CompCode, $Reason);
      print"MQCONN reason:$Reason\n";
      
      my $ObjDesc = { ObjectType => MQOT_Q, ObjectName => $qname };
      
      my $Options = MQOO_INQUIRE | MQOO_SET | MQOO_FAIL_IF_QUIESCING;
      my $Hobj = MQOPEN($Hconn,$ObjDesc,$Options,$CompCode,$Reason);
      print"MQOPEN reason:$Reason\n";
      
      my $tst = MQINQ($Hconn,$Hobj,$CompCode,$Reason,MQIA_CURRENT_Q_DEPTH);
      print"Depth of $qname is: $tst\n";
      
      MQCLOSE($Hconn,$Hobj,$COptions,$CompCode,$Reason);
      print"MQCLOSE reason:$Reason\n";
      MQDISC($Hconn,$CompCode,$Reason);
      print"MQDISC reason:$Reason\n";
      

      【讨论】:

        【解决方案3】:

        现在没人用谷歌了吗?

        PyMQI,一个用于 WebSphere MQ 的开源 Python 扩展

        http://metacpan.org/pod/MQSeries::Queue

        我的 %qattr = $queue->查询(qw(MaxMsgLength MaxQDepth));

        【讨论】:

        • 谢谢布赖恩。但这可能是关于使用正确的搜索词。
        • 嗯,Brian,你说的是 PyMQI,但你提供的链接是指向其他项目的。 PyMQI 适用于 Python,这是正确的链接 :-) packages.python.org/pymqi
        【解决方案4】:

        Google 没有给你我最近在http://www.capitalware.biz/rl_blog/?p=1616写的名为“如何从脚本或程序中清除 MQ 队列”的博客文章

        只需将 MQSC“清除”命令更改为“当前深度”(CURDEPTH)。 即

        DIS QL(TEST.*) CURDEPTH
        

        【讨论】:

        • 谢谢罗杰。但是我们是否可以在安全队列的情况下设置安全出口,尤其是在使用加密文件进行身份验证时?(而不是普通的用户名/密码)。我确实看到我们可以使用 MQEnvironment 设置后者。
        【解决方案5】:

        有许多基于 JVM 的脚本/ish 语言可以让您访问 Java 类。有些需要薄胶层,有些根本不需要。

        • 时髦的
        • Jython
        • 斯卡拉
        • Clojure

        【讨论】:

        • 投反对票的人能给出理由吗?问题是“我可以用 Java 来做这件事,但我想用脚本语言来做”——这些语言都回答了这个问题。
        猜你喜欢
        • 1970-01-01
        • 2012-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-31
        • 1970-01-01
        • 2018-06-10
        • 1970-01-01
        相关资源
        最近更新 更多