如何使用python在RabbitMQ交换机上列出或发现队列?

时间:2010-11-26 19:06:59

标签: python rabbitmq amqp

我需要一个python客户端,它可以在重新启动的RabbitMQ服务器交换机上发现队列,然后启动客户端以恢复消耗来自每个队列的消息。如何从兼容RabbitMQ的python api /库中发现队列?

8 个答案:

答案 0 :(得分:40)

似乎没有直接的AMQP方式来管理服务器,但有一种方法可以通过Python来实现。我建议使用子进程模块结合rabbitmqctl命令来检查队列的状态。

我假设你在Linux上运行它。从命令行运行:

rabbitmqctl list_queues

将导致:

Listing queues ...
pings   0
receptions      0
shoveled        0
test1   55199
...done.

(好吧,由于我的特定队列,它确实在我的情况下)

在您的代码中,使用此代码获取rabbitmqctl的输出:

import subprocess

proc = subprocess.Popen("/usr/sbin/rabbitmqctl list_queues", shell=True, stdout=subprocess.PIPE)
stdout_value = proc.communicate()[0]
print stdout_value

然后,只需提出自己的代码来解析stdout_value以供自己使用。

答案 1 :(得分:24)

据我所知,没有办法做到这一点。这与Python无关,但是因为AMQP没有定义任何队列发现方法。

在任何情况下,在AMQP中,它是声明队列的客户端(消费者):发布者使用路由密钥向交换发布消息,并且消费者确定这些路由密钥到达哪些队列。因此,在没有消费者的情况下谈论队列是没有意义的。

答案 2 :(得分:17)

您可以添加插件rabbitmq_management

sudo /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
sudo service rabbitmq-server restart

然后使用rest-api

import requests

def rest_queue_list(user='guest', password='guest', host='localhost', port=15672, virtual_host=None):
    url = 'http://%s:%s/api/queues/%s' % (host, port, virtual_host or '')
    response = requests.get(url, auth=(user, password))
    queues = [q['name'] for q in response.json()]
    return queues

我在这个例子中使用requests库,但它并不重要。

我也找到了为我们做的图书馆 - pyrabbit

from pyrabbit.api import Client
cl = Client('localhost:15672', 'guest', 'guest')
queues = [q['name'] for q in cl.get_queues()]

答案 3 :(得分:3)

因为我是一名RabbitMQ初学者,所以请注意这一点,但有一个有趣的 Management Plugin ,它将HTTP接口暴露给“从这里你可以管理交换,队列,绑定,虚拟主机,用户和权限。希望UI是相当不言自明的。“

http://www.rabbitmq.com/blog/2010/09/07/management-plugin-preview-release/

答案 4 :(得分:2)

管理功能将在AMQP的未来版本中提供。因此,现在您将不得不等到具有该功能的新版本。

答案 5 :(得分:2)

我使用https://github.com/bkjones/pyrabbit。它直接与RabbitMQ的mgmt插件的API接口进行对话,对于询问RabbitMQ非常方便。

答案 6 :(得分:0)

pyrabbit对我来说效果不佳;但是,Management Plugin本身有自己的命令行脚本,您可以从自己的管理GUI下载并稍后使用(例如,我从

下载)
http://localhost:15672/cli/

供本地使用)

答案 7 :(得分:0)

我发现这很适合我,/ els是我的演示虚拟主机名称。.

rabbitmqctl list_queues --vhost /els