用ruby读取MSMQ消息计数
从远程msmq队列查询消息计数时遇到问题 这是我的代码:用ruby读取MSMQ消息计数,ruby,msmq,windows-server,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.
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地址
这种方法实际上是一种魅力,但是:
感谢您提高效率,MSMQ不会在以下队列上维护性能数据:
John Breakwell为了提高效率,MSMQ不维护以下队列的性能数据:
约翰·布雷克韦尔嗨,约翰,谢谢你的回答。现在,我已经很好地理解了消息队列消耗大量资源的问题。然而,这一部分:“实际上,在应用程序打开空队列之前,它们不会作为要分析的东西存在。”提出了一点问题。查询“非活动”消息队列会导致与无法访问服务器时相同的异常。因此很难判断原因是什么。如果空队列“实际上不存在”,则不可能分析此队列的性能计数器。这真的不可能吗?简单测试:加载性能监视器并尝试添加“MSMQ队列\队列中的消息”对象的实例。您可以从中选择的队列列表将不包括空/非活动队列。一种解决方法是在接收应用程序从不读取的每个队列中放置一条消息。此“keepalive”消息确保队列显示以进行性能监视。显然,对于只从队列顶部自动接收消息的应用程序不起作用。嘿,John,感谢您确认在不使用队列的情况下没有性能计数器。我自己刚检查过(昨天我已经在家了)。我刚刚偶然发现的一件有趣的事情是,如果队列为空,但应用程序仍在从队列接收消息(queue.Receive(timeout)),您仍然可以检查消息计数。这解决了我的问题,因为在我们的自动部署(使用ruby)中,我们在停止windows服务之前检查计数。还将处理之前已停止服务的情况。欢呼这是预期的行为-如果应用程序在队列上有一个打开的句柄(可以是空的,也可以不是空的),那么MSMQ将生成性能数据。嗨,John,谢谢你的回答。现在,我已经很好地理解了消息队列消耗大量资源的问题。然而,这一部分:“实际上,在应用程序打开空队列之前,它们不会作为要分析的东西存在。”提出了一点问题。查询“非活动”消息队列会导致与无法访问服务器时相同的异常。因此很难判断原因是什么。如果空队列“实际上不存在”,则不可能分析此队列的性能计数器。这真的不可能吗?简单测试:加载性能监视器并尝试添加“MSMQ队列\队列中的消息”对象的实例。您可以从中选择的队列列表将不包括空/非活动队列。一种解决方法是在接收应用程序从不读取的每个队列中放置一条消息。此“keepalive”消息确保队列显示以进行性能监视。显然,对于只从队列顶部自动接收消息的应用程序不起作用。嘿,John,感谢您确认在不使用队列的情况下没有性能计数器。我自己刚检查过(昨天我已经在家了)。我刚刚偶然发现的一件有趣的事情是,如果队列为空,但应用程序仍在从队列接收消息(queue.Receive(timeout)),您仍然可以检查消息计数。这解决了我的问题,因为在我们的自动部署(使用ruby)中,我们在停止windows服务之前检查计数。还将处理之前已停止服务的情况。这是预期的行为-如果应用程序在队列上有一个打开的句柄(可以是空的,也可以不是),那么MSMQ将生成性能数据。