我需要一个python客户端,它可以在重新启动的RabbitMQ服务器交换上发现队列,然后启动一个客户端来继续使用每个队列中的消息。我如何从一些RabbitMQ兼容的python API/库中发现队列?
pbgvytdp1#
似乎没有一种直接的AMQP方式来管理服务器,但有一种方法可以从Python中实现。我建议使用一个 subprocess 模块结合rabbitmqctl命令来检查队列的状态。我假设您正在Linux上运行该程序。从命令行运行:
rabbitmqctl
rabbitmqctl list_queues
将导致:
Listing queues ... pings 0 receptions 0 shoveled 0 test1 55199 ...done.
(well,在我的情况下,由于我的特定队列,它确实如此)在您的代码中,使用以下代码获取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,以供自己使用。
stdout_value
2g32fytz2#
据我所知,没有任何方法可以做到这一点,这与Python无关,而是因为AMQP没有定义任何队列发现的方法。在任何情况下,在AMQP中,声明队列的是客户端(消费者):发布者使用路由关键字将消息发布到交换,而使用者确定这些路由关键字进入哪些队列。因此,在没有使用者的情况下讨论队列没有意义。
7xllpg7q3#
您可以添加插件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()]
webghufk4#
因为我是RabbitMQ的初学者,所以对此持保留态度,但有一个有趣的**Management Plugin**,它公开了一个HTTP接口,“从这里,您可以管理交换、队列、绑定、虚拟主机、用户和权限。希望UI是相当自我解释的。”http://www.rabbitmq.com/blog/2010/09/07/management-plugin-preview-release/
eagi6jfj5#
我使用https://github.com/bkjones/pyrabbit,它直接与RabbitMQ的管理插件的API接口对话,对于询问RabbitMQ非常方便。
w8biq8rn6#
管理特性将在AMQP的未来版本中提供。所以现在你必须等待一个新版本,它将附带该功能。
fcg9iug37#
我发现这对我很有效,/els是我的演示vhost名称。
rabbitmqctl list_queues --vhost /els
6fe3ivhb8#
pyrabbit对我来说不是很好用;但是,Management Plugin本身有自己的命令行脚本,您可以从自己的管理GUI下载该脚本,并在以后使用(例如,我从
http://localhost:15672/cli/
供本地使用)
vlf7wbxs9#
我会简单地使用这个:只需用您的值替换user(默认值= guest)、passwd(默认值= guest)和port即可。
import requests import json def call_rabbitmq_api(host, port, user, passwd): url = 'http://%s:%s/api/queues' % (host, port) r = requests.get(url, auth=(user,passwd)) 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
9条答案
按热度按时间pbgvytdp1#
似乎没有一种直接的AMQP方式来管理服务器,但有一种方法可以从Python中实现。我建议使用一个 subprocess 模块结合
rabbitmqctl
命令来检查队列的状态。我假设您正在Linux上运行该程序。从命令行运行:
将导致:
(well,在我的情况下,由于我的特定队列,它确实如此)
在您的代码中,使用以下代码获取
rabbitmqctl
的输出:然后,您只需编写自己的代码来解析
stdout_value
,以供自己使用。2g32fytz2#
据我所知,没有任何方法可以做到这一点,这与Python无关,而是因为AMQP没有定义任何队列发现的方法。
在任何情况下,在AMQP中,声明队列的是客户端(消费者):发布者使用路由关键字将消息发布到交换,而使用者确定这些路由关键字进入哪些队列。因此,在没有使用者的情况下讨论队列没有意义。
7xllpg7q3#
您可以添加插件rabbitmq_management
然后使用rest-api
我在这个例子中使用了requests库,但它并不重要。
我还找到了为我们做的库-pyrabbit
webghufk4#
因为我是RabbitMQ的初学者,所以对此持保留态度,但有一个有趣的**Management Plugin**,它公开了一个HTTP接口,“从这里,您可以管理交换、队列、绑定、虚拟主机、用户和权限。希望UI是相当自我解释的。”
http://www.rabbitmq.com/blog/2010/09/07/management-plugin-preview-release/
eagi6jfj5#
我使用https://github.com/bkjones/pyrabbit,它直接与RabbitMQ的管理插件的API接口对话,对于询问RabbitMQ非常方便。
w8biq8rn6#
管理特性将在AMQP的未来版本中提供。所以现在你必须等待一个新版本,它将附带该功能。
fcg9iug37#
我发现这对我很有效,/els是我的演示vhost名称。
6fe3ivhb8#
pyrabbit对我来说不是很好用;但是,Management Plugin本身有自己的命令行脚本,您可以从自己的管理GUI下载该脚本,并在以后使用(例如,我从
供本地使用)
vlf7wbxs9#
我会简单地使用这个:只需用您的值替换user(默认值= guest)、passwd(默认值= guest)和port即可。
从此处引用:https://gist.github.com/hiroakis/5088513#file-example_rabbitmq_api-py-L2