代码之家  ›  专栏  ›  技术社区  ›  Diego

用JScript查看MSMQ传出队列

  •  0
  • Diego  · 技术社区  · 16 年前

    var info = new ActiveXObject("MSMQ.MSMQQueueInfo");
    info.FormatName = /*<Queue name>*/;
    
    // 0x80 = MQ_ADMIN_ACCESS
    // 0x20 = MQ_PEEK_ACCESS
    // 0x00 = MQ_DENY NONE
    var mq = info.Open(0x80 | 0x20, 0x00);
    
    var msg = mq.PeekCurrent(false, true, 0); 
    if (msg != null) {
        WScript.echo("message found");  
    }
    else
    {
        WScript.echo("Nothing");
    }
    mq.close();
    

    然后我在服务器上运行了它,即使队列包含一千多条消息, 总是返回null。如果我删除MQ\u ADMIN\u访问,它会尝试连接到远程专用队列,然后超时(正如预期的那样,因为它会关闭以让消息累积)。如果随后启动远程专用队列,它将从中正确读取消息。

    info.Open

    我不是MSMQ的专家(恰恰相反),所以我可能犯了一个明显的错误,我看不出来。任何帮助都是受欢迎的。谢谢。

    :是否可以窥视远程传出队列?目前,脚本正在我测试的传出队列所在的机器上运行,但并不是只有它有这些队列。我希望避免将脚本部署到任何地方,我更希望将它放在一个地方。谢谢。

    1 回复  |  直到 16 年前
        1
  •  0
  •   Diego    15 年前

    我找到了两个问题的答案:

    • 我遇到的问题是,当脚本在当前控制台会话下运行时,我试图监视作为群集资源组一部分运行的MSMQ队列。要访问群集资源组内的队列,必须执行以下操作:

      1. 创建新的通用应用程序
      2. 运行MSMQ服务的组中的资源,并将其指向脚本。
      3. 确保选中“将网络名称用作计算机名”复选框 .

    完成后,脚本现在将连接到在集群组中运行的MSMQ服务。

    • 传出队列不是真正的队列,但可以看作是“消息列表,按它们要到达的队列分组”。因此,它们不能被远程监控。这意味着,要监视它们,必须在每台计算机上部署执行该操作的脚本/应用程序,并且在集群环境中,必须在每个集群组中运行一个实例。如果有许多服务器,这会增加很大的开销,但是可以通过创建一个集中式系统来克服。不管怎样,这是个大任务。。。

    我希望我的发现对将来的人有用 回到披萨烘焙。。。

    推荐文章