使用ruby读取MSMQ消息计数

时间:2012-01-18 17:46:54

标签: ruby msmq windows-server

我从远程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. 如果队列中仍有项目,则此方法可以正常工作。

  3. 我找到了这篇文章:How do I create an MSMQ outgoing queue? 其中说:

      

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

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

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

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

1 个答案:

答案 0 :(得分:1)

为了提高效率,MSMQ不会在以下队列中维护性能数据:

  1. 清空,
  2. 例如,您可以拥有一台拥有1,000个空队列的计算机,如果这些数据被主动维护,这些计算机会锁定内存资源。实际上,在应用程序打开之前,空队列不存在要分析的内容。

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

    干杯 John Breakwell