我在从远程 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 发生异常。
如果队列中仍有项目,则此方法按预期工作。
我找到了这篇文章:如何创建 MSMQ 传出队列? 其中说:
MSMQ 使队列保持活动状态(即使它是空的)几分钟,以防您要发送另一条消息。这节省了队列管理器重新建立网络连接的工作。此清理延迟由 CleanupInterval 注册表值控制 - 客户端为 5 分钟,服务器为 2 分钟。
我们目前无法调整注册表设置。另一种选择可能是尝试通过 WMI 获取消息计数,但我不确定您如何在 ruby 中执行此操作(作为 .NET 开发人员)
也许有可能“唤醒”队列?
我将不胜感激任何帮助!谢谢