从客户端检查RabbitMQ队列大小

有谁知道是否有办法从客户端应用程序检查RabbitMQ队列中的消息数量?

我正在使用.NET客户端库。

你实际上可以通过客户端检索这个。 当执行queue_declare操作时,RabbitMQ返回一个包含(<queue name>, <message count>, <consumer count>)的三元组。 queue_declare的passive参数允许您在不修改服务器状态的情况下检查队列是否存在。 所以你可以使用queue_declarepassive选项来检查队列的长度。 不知道.NET,但在Python中看起来像这样:

 name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True) 

我2年的时间太晚了,但是我自己也在寻找它,发现rabbitmq给了你一个简单的脚本来与erlang节点进行通信..在sbin文件夹中,RabbitMQ的起始脚本位于..你可以基本上说

 ./rabbitmqctl list_queues 

这将显示队列以及等待这些队列的消息数量,同样你也可以说

 ./rabbitmqctl list_channels ./rabbitmqctl list_connections 

等等有关更多信息,您可以访问这里

如果您想在.Net中执行此操作,请检查您正在使用的客户端库的版本。

我正在使用2.2.0版本,我不得不使用BasicGet(queue,noAck)。
在这个版本的库QueueDeclare()中只返回一个包含队列名的string。

 BasicGetResult result = channel.BasicGet("QueueName", false); uint count = result != null ? result.MessageCount : 0; 

我知道从2.6.1版本,QueueDeclare()返回QueueDeclareOktypes的对象。

 QueueDeclareOk result = channel.QueueDeclare(); uint count = result.MessageCount; 

或者,您可以从命令行调用:

 <InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues 

你看到下面的输出:

列出队列…
队列名称1
…完成。

HTH

更新:自从mmalone非常有用的post以来,似乎queue_declare(..)的pika实现已经改变了。

在python / pika(v0.9.5)中,仍然可以通过pika检查队列的深度,但是需要稍微间接的方法。

queue_declare(…)将一个方法对象传递给它的callback函数,然后你可以检查它。 例如,要检查名为'myQueue'的队列中的消息和消费者的数量:

 def cbInspect(qb): messagesInQueue = qb.method.message_count print "There are %d messages in myQueue" % messagesInQueue consumersInQueue = qb.method.consumer_count print "There are %d consumers in myQueue" % consumersInQueue return myChannel = channel.queue_declare(callback=cbInspect, queue='myQueue', passive=True) 

希望这有助于,并请容易对我,我在这里新来的:-)

我正在使用.Net客户端库的3.3.1版本。

我使用以下内容,这与Ralph Willgoss的第二个build议非常相似,但是可以提供队列名称作为参数。

 QueueDeclareOk result = channel.QueueDeclarePassive(queueName); uint count = result != null ? result.MessageCount : 0; 

您可以使用这里logging的IModel的MessageCount方法

http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v3.6.4/rabbitmq-dotnet-client-3.6.4-client-htmldoc/html/type-RabbitMQ.Client.IModel.html#method- L:RabbitMQ.Client.IModel.MessageCount(System.String)

编辑:我知道这是一个非常古老的post,但它是第一个谷歌的反应,我希望它会帮助人们在未来寻找这个答案。

至less从RabbitMQ 3.3.5开始,您可以通过调用RabbitMQpipe理HTTP API在没有任何RabbitMQ客户端库的C#程序中执行此操作:

 // The last segment of the URL is the RabbitMQ "virtual host name". // The default virtual host name is "/", represented urlEncoded by "%2F". string queuesUrl = "http://MY_RABBITMQ_SERVER:15672/api/queues/%2F"; WebClient webClient = new WebClient { Credentials = new NetworkCredential("MY_RABBITMQ_USERNAME", "MY_RABBITMQ_PASSWORD") }; string response = webClient.DownloadString(queuesUrl); 

用户名和密码与用于loginRabbitMQpipe理控制台UI的用户名和密码相同。

响应将是一个带有队列列表的JSONstring,包括其消息计数以及其他属性。 (如果你喜欢的话,你可以使用类似Json.NET的库将这个JSON反序列化成一个C#对象。)

API文档与RabbitMQpipe理控制台一起安装,并且应在该服务器上的http:// MY_RABBITMQ_SERVER:15672 / api上可用 。

我的小片段根据Myydrralls的答案。 我想如果他的回答中有代码的话,我可能会注意到它更快。

 public uint GetMessageCount(string queueName) { using (IConnection connection = factory.CreateConnection()) using (IModel channel = connection.CreateModel()) { return channel.MessageCount(queueName); } }