Rabbitmq 芹菜-以编程方式列出队列

Rabbitmq 芹菜-以编程方式列出队列,rabbitmq,celery,Rabbitmq,Celery,如何使用Python代码以编程方式列出在RabbitMQ代理上创建的当前队列以及连接到这些队列的工作人员的数量?这相当于: rabbitmqctl list_queues name consumers 作为rabbitmq客户端,您可以使用。但是,它没有用于列表队列的选项。最简单的解决方案是使用子流程从python调用rabbitmqctl命令: import subprocess command = "/usr/local/sbin/rabbitmqctl list_queues name

如何使用Python代码以编程方式列出在RabbitMQ代理上创建的当前队列以及连接到这些队列的工作人员的数量?这相当于:

rabbitmqctl list_queues name consumers

作为rabbitmq客户端,您可以使用。但是,它没有用于列表队列的选项。最简单的解决方案是使用
子流程从python调用rabbitmqctl命令:

import subprocess
command = "/usr/local/sbin/rabbitmqctl list_queues name consumers"
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
print process.communicate()

我这样做,并在网页上显示所有队列及其详细信息(消息就绪、未确认等)-

import kombu
conn = kombu.Connection(broker_url)# example 'amqp://guest:guest@localhost:5672/'
conn.connect()
client = conn.get_manager()
queues = client.get_queues('/')#assuming vhost as '/'
您需要安装kombu,队列将是一个字典,其中的键表示队列名称。 我想我是在翻阅芹菜花代码(用于监控芹菜的工具)时得到的


更新:正如@zaq178miami所指出的,您还需要具有http API的管理插件。我忘记了我在rabbitmq中启用了此功能。

这样做是为了我:

def get_queue_info(queue_name):
    with celery.broker_connection() as conn:
        with conn.channel() as channel:
            return channel.queue_declare(queue_name, passive=True)
这将返回一个namedtuple,其中包含该队列的名称、等待的消息数和使用者

ksrini的答案也是正确的,当您需要关于队列的更多信息时可以使用


谢谢你问Solem谁给了我提示。

没有标准的方法可以获得类似使用AMQP协议创建的队列列表这样的信息,但我想这会满足你的任何需求。我建议使用http API,如果你使用命令行,你可能会遇到权限问题,你只能在安装了RMQ的地方执行这个命令。这是我的解决方案,还不错。我唯一的问题是这是一个sudo命令,我将从Django执行它。我可以在不以sudo模式运行Django的情况下执行此操作吗?您可以为正在运行Django应用程序的用户授予运行rabbitmqctl的权限,并避免调用sudo。当我尝试调用client.get_queues(“/”)时,我会收到以下错误消息:File“/home/danielmaxx/.virtualenvs/rendit/local/lib/python2.7/site packages/pyrabbit/http.py”,第104行,在do_调用中引发NetworkError(“错误:%s%s”%(键入(out),out))pyrabbit.http.NetworkError:错误:[Errno 111]连接refused@danielmaxx,您将需要兔子mq的管理插件,如我的答案更新中所述。管理插件提供了pyrabbit使用的http API。一旦你安装了它,你就不会得到你提到的错误。我确实安装了它,但还是失败了。可能与权限有关?不确定。我以前遇到过连接被拒绝错误。在深入研究pyrabbit的代码之后,我能够追踪到http API访问,并安装插件为我解决了这个问题。我看到您发布了另一个由@asksol提供的答案。那对你有用吗?