rabbitmq celery -以编程方式列出队列

tvz2xvvm  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(4)|浏览(137)

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

rabbitmqctl list_queues name consumers
to94eoyn

to94eoyn1#

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

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,队列是一个字典,其中的键代表队列名称。我想我是在挖掘celery 花(用于监控celery 的工具)的代码时得到的。
更新:正如@zaq178miami所指出的,你还需要有http API的管理插件。我忘了我在rabbitmq中启用了比。

mu0hgdu0

mu0hgdu02#

这办法对我来说很管用:

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的答案也是正确的,并且可以在需要有关队列的详细信息时使用。
感谢Ask Solem给我的提示。

cidc1ykv

cidc1ykv3#

作为一个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()
nhaq1z21

nhaq1z214#

我会简单地使用这个:只需用您的值替换user(默认值= guest)、passwd(默认值= guest)和port即可。

import requests
import json

def call_rabbitmq_api(host, port, user, passwd):
  url = 'https://%s:%s/api/queues' % (host, port)
  r = requests.get(url, auth=(user,passwd),verify=False)
  return r

def get_queue_name(json_list):
  res = []
  for json in json_list:
    res.append(json["name"])
  return res

if __name__ == '__main__':
  host = 'rabbitmq_host'
  port = 55672
  user = 'guest'
  passwd = 'guest'
  res = call_rabbitmq_api(host, port, user, passwd)
  print ("--- dump json ---")
  print (json.dumps(res.json(), indent=4))
  print ("--- get queue name ---")
  q_name = get_queue_name(res.json())
  print (q_name)

从此处引用:https://gist.github.com/hiroakis/5088513#file-example_rabbitmq_api-py-L2

相关问题