我创建了一个脚本来监控一组队列,虽然它与远程专用队列完美配合,但它不适用于传出队列。我做了一个实验,从脚本中删除了除基本内容之外的所有内容,并创建了以下测试脚本:
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();
然后我在服务器上运行它,即使队列包含超过一千条消息,PeekCurrent也总是返回 null。如果我删除 MQ_ADMIN_ACCESS,它会尝试连接到远程专用队列并且它会超时(正如预期的那样,因为它已经让消息累积)。如果我然后启动远程专用队列,它会从中正确读取消息。
出于好奇,我发现使用MQ_ADMIN_ACCESS 时,无论队列名称(即是否存在) , info.Open总是成功。例如,我输入“DIRECT=OS:Whatever\private$\RandomQueueName”,我没有收到任何错误。
我不是 MSMQ 的专家(恰恰相反),所以我可能犯了一个明显的错误,我看不到它。任何帮助都非常受欢迎。谢谢。
附带问题:是否可以查看远程传出队列?目前脚本正在我正在测试的 Outgoing Queue 所在的机器上运行,但它并不是唯一具有这些队列的机器。我想避免在任何地方部署脚本,我更愿意将它放在一个地方。谢谢。