簡體   English   中英

如何使用 python 在 RabbitMQ 交換中列出或發現隊列?

[英]How can I list or discover queues on a RabbitMQ exchange using python?

我需要一個 python 客戶端,它可以在重新啟動的 RabbitMQ 服務器交換上發現隊列,然后啟動客戶端以恢復使用每個隊列中的消息。 如何從一些與 RabbitMQ 兼容的 python api/庫中發現隊列?

似乎沒有直接的 AMQP 方式來管理服務器,但有一種方法可以從 Python 中完成。 我建議將rabbitmqctl模塊與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供您自己使用。

據我所知,沒有任何方法可以做到這一點。 這與 Python 無關,而是因為 AMQP 沒有定義任何隊列發現方法。

在任何情況下,在 AMQP 中,聲明隊列的是客戶端(消費者):發布者將消息發布到帶有路由鍵的交換,消費者確定這些路由鍵去哪個隊列。 所以在沒有消費者的情況下談論隊列是沒有意義的。

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

我使用https://github.com/bkjones/pyrabbit 它直接與 RabbitMQ 的 mgmt 插件的 API 接口對話,對於查詢 RabbitMQ 非常方便。

由於我是 RabbitMQ 初學者,因此請稍加保留,但有一個有趣的Management Plugin ,它公開了一個 HTTP 接口“從這里你可以管理交換、隊列、綁定、虛擬主機、用戶和權限。希望 UI是不言自明的。”

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

管理功能將在 AMQP 的未來版本中提供。 因此,現在您將不得不等待具有該功能的新版本。

我發現這對我有用,/els 是我的演示虛擬主機名稱..

rabbitmqctl list_queues --vhost /els

pyrabbit 對我來說效果不佳; 但是,管理插件本身有自己的命令行腳本,您可以從自己的管理 GUI 下載該腳本並稍后使用(例如,我從

http://localhost:15672/cli/

供本地使用)

我會簡單地使用這個:只需將用戶(默認=訪客)、密碼(默認=訪客)和端口替換為您的值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM