首页 文章

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

提问于
浏览
33

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

7 回答

  • 2

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

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

  • 39

    似乎没有直接的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 供您自己使用 .

  • 15

    您可以添加插件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()]
    
  • 2

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

  • 0

    我用https://github.com/bkjones/pyrabbit . 它是_mt2插件的API接口,非常方便查询RabbitMQ .

  • 2

    因为我是一名RabbitMQ初学者,所以请注意这一点,但是有一个有趣的 Management Plugin ,它将HTTP接口暴露给"From here you can manage exchanges, queues, bindings, virtual hosts, users and permissions. Hopefully the UI is fairly self-explanatory."

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

  • 22

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

    http://localhost:15672/cli/
    

    供当地使用)

相关问题