【问题标题】:celery - Programmatically list queuescelery - 以编程方式列出队列
【发布时间】:2014-08-01 23:09:04
【问题描述】:

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

rabbitmqctl list_queues name consumers

【问题讨论】:

  • 没有标准的方法来获取诸如使用 AMQP 协议创建的队列列表之类的信息,但我想HTTP API from management plugin 将满足您的任何需求。
  • as @zaq178miami 我建议使用http API,如果使用命令行可能会出现权限问题,并且只能在安装了RMQ的地方执行命令。

标签: rabbitmq celery


【解决方案1】:

作为rabbitmq 客户端,您可以使用pika。但是它没有 list_queues 的选项。最简单的解决方案是使用subprocess从python调用rabbitmqctl命令:

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

【讨论】:

  • 这是我的解决方案,还不错。我唯一的问题是这是一个 sudo 命令,我将从 Django 执行它。我可以不以 sudo 模式运行 Django 吗?
  • 您可以授予运行 django 应用程序的用户运行 rabbitmqctl 的权限,并避免调用 sudo。
【解决方案2】:

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

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中启用了。

【讨论】:

  • 当我尝试调用 client.get_queues('/') 时,我收到以下错误消息: File "/home/danielmaxx/.virtualenvs/rendit/local/lib/python2.7/site-packages /pyrabbit/http.py",第 104 行,在 do_call raise NetworkError("Error: %s %s" % (type(out), out)) pyrabbit.http.NetworkError: Error: [Errno 111] 连接被拒绝
  • @danielmaxx,您将需要我的答案更新中发布的 rabbit mq 管理插件。管理插件提供了 pyrabbit 使用的 http API。安装后,您将不会收到您提到的错误。
  • 我确实安装了它,但仍然失败。也许与权限有关?
  • 不确定。我之前遇到过连接拒绝错误。在挖掘到 pyrabbit 的代码后,我能够将其追踪到 http API 访问并安装插件为我解决了这个问题。我看到您发布了@asksol 提供的另一个答案。这对你有用吗?
【解决方案3】:

这种方式为我做到了:

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)

这将返回一个命名元组,其中包含该队列的名称、等待消息的数量和消费者。

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

感谢 Ask Solem,他给了我提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2019-06-02
    • 2020-04-23
    • 1970-01-01
    • 2012-10-03
    • 2020-06-08
    • 1970-01-01
    相关资源
    最近更新 更多