当前位置:  开发笔记 > 编程语言 > 正文

从客户端检查RabbitMQ队列大小

如何解决《从客户端检查RabbitMQ队列大小》经验,为你挑选了7个好方法。

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

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



1> mmalone..:

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

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


@Theyouthis找到诸如"这不再是最好的方法"这样的评论是非常令人沮丧的,而没有任何关于你所指的改进方式的参考.为什么不分享你的发现?

2> 小智..:

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

./rabbitmqctl list_queues

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

./rabbitmqctl list_channels
./rabbitmqctl list_connections

有关更多信息,请访问此处



3> Ralph Willgo..:

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

我正在使用2.2.0版本,我不得不使用BasicGet(queue,noAck).
在此版本的Library QueueDeclare()中,只返回包含队列名称的字符串.

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


我知道在2.6.1版本中,QueueDeclare()返回一个QueueDeclareOk类型的对象.

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


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

\sbin\rabbitmqctl.bat list_queues

你看到以下输出:

列出队列...
QueueName 1
...完成.

HTH



4> Mike..:

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

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

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



5> 小智..:

您可以使用此处记录的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- M:RabbitMQ.Client.IModel.MessageCount(System.String)

编辑:我知道这是一个很老的帖子,但这是google的第一个回复,我希望它将对以后寻求此答案的人们有所帮助。



6> tohster..:

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

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

queue_declare(...)将方法对象传递给其回调函数,然后您可以检查该函数.例如,要检查名为的队列中的消息和使用者的数量'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)

希望这会有所帮助,请放轻松我,我是新来的:-)



7> 小智..:

我的小片段基于Myydrralls的回答.我想如果他的答案中有代码我可能会更快地注意到它.

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

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有