1

我在从远程 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 地址。

这种方法实际上是一种魅力,但是:

  1. 如果队列为空,那么在一定时间后我会不断收到此错误:

    `method_missing': Init (WIN32OLERuntimeError) OLE 错误代码:MSMQManagement 中的 C00E0004 队列未打开或可能不存在。HRESULT 错误代码:0x80020009 发生异常。

  2. 如果队列中仍有项目,则此方法按预期工作。

我找到了这篇文章:如何创建 MSMQ 传出队列? 其中说:

MSMQ 使队列保持活动状态(即使它是空的)几分钟,以防您要发送另一条消息。这节省了队列管理器重新建立网络连接的工作。此清理延迟由 CleanupInterval 注册表值控制 - 客户端为 5 分钟,服务器为 2 分钟。

我们目前无法调整注册表设置。另一种选择可能是尝试通过 WMI 获取消息计数,但我不确定您如何在 ruby​​ 中执行此操作(作为 .NET 开发人员)

也许有可能“唤醒”队列?

我将不胜感激任何帮助!谢谢

4

1 回答 1

1

为提高效率,MSMQ 不维护以下队列的性能数据:

  1. 空的,和
  2. 关闭

例如,您可以拥有一台具有 1,000 多个空队列的机器,如果这些数据被主动维护,它们会锁定内存资源。实际上,空队列在被应用程序打开之前不作为要分析的东西存在。

我关于传出队列的博客文章与这种情况无关,因为您正在查询有关私有队列的信息。

干杯约翰·布雷克韦尔

于 2012-01-18T19:30:09.417 回答