我从远程msmq队列查询消息计数时遇到问题。
这是我的代码:
def get_message_count
mq_management = WIN32OLE.new('MSMQ.MSMQManagement')
mq_management.Init('xxx.yyy.zz.aa', nil,'direct=tcp:xxx.yyy.zz.aa\private$\inbox')
message_count = mq_management.MessageCount
end
xxx.yyy.zz.aa是远程计算机的IP地址。
这种方法实际上是一种魅力,但是:
如果队列为空,那么我会在一段时间后继续收到此错误:
`method_missing':Init(WIN32OLERuntimeError) OLE错误代码:MSMQManagement中的C00E0004 队列未打开或可能不存在。 HRESULT错误代码:0x80020009 发生了例外。
如果队列中仍有项目,则此方法可以正常工作。
我找到了这篇文章:How do I create an MSMQ outgoing queue? 其中说:
MSMQ将队列保持活动状态(即使它是空的)几分钟,以防您要发送另一条消息。这为队列管理器节省了再次建立网络连接的工作量。此清理延迟由CleanupInterval注册表值控制 - 客户端为5分钟,服务器为2分钟。
目前我们无法调整注册表设置。 另一个选择可能是尝试通过WMI获取消息计数,但我不确定你是如何在ruby中做这个的(作为.NET开发人员)
也许有可能“唤醒”队列?
我将不胜感激任何帮助! 谢谢
答案 0 :(得分:1)
为了提高效率,MSMQ不会在以下队列中维护性能数据:
关于传出队列的博文与此情况无关,因为您正在查询有关私有队列的信息。
干杯 John Breakwell