2010-11-26 25 views
26

Tôi cần phải có một khách hàng python có thể phát hiện hàng đợi trên một máy chủ RabbitMQ khởi động lại trao đổi, và sau đó bắt đầu lên một khách hàng để tiếp tục tiêu thụ tin nhắn từ mỗi hàng đợi. Làm thế nào tôi có thể khám phá hàng đợi từ một số thư viện/thư viện python tương thích RabbitMQ?Làm cách nào để tôi có thể liệt kê hoặc khám phá các hàng đợi trên trao đổi RabbitMQ bằng cách sử dụng python?

Trả lời

17

Theo như tôi biết, không có cách nào để thực hiện việc này. Đó là không có gì để làm với Python, nhưng vì AMQP không xác định bất kỳ phương pháp phát hiện hàng đợi nào.

Trong mọi trường hợp, trong AMQP, khách hàng (người tiêu dùng) khai báo hàng đợi: nhà xuất bản xuất bản thư tới trao đổi với khóa định tuyến và người tiêu dùng xác định hàng đợi nào đang định tuyến. Vì vậy, nó không có ý nghĩa để nói về hàng đợi trong sự vắng mặt của người tiêu dùng.

1

Tính năng quản lý đến hạn trong phiên bản AMQP trong tương lai. Vì vậy, bây giờ bạn sẽ phải chờ đợi cho đến khi một phiên bản mới sẽ đi kèm với chức năng đó.

2

Kể từ khi tôi là một người mới bắt đầu RabbitMQ, thực hiện việc này với một hạt muối, nhưng có một thú vị Management Plugin, mà cho thấy một giao diện HTTP để "Từ đây bạn có thể quản lý sàn giao dịch, hàng đợi, bindings, máy ảo, người dùng và Hy vọng giao diện người dùng khá tự giải thích. "

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

33

Có vẻ như không phải là một AMQP chiều trực tiếp để quản lý máy chủ nhưng có một cách bạn có thể làm điều đó từ Python. Tôi khuyên bạn nên sử dụng mô-đun subprocess được kết hợp với lệnh rabbitmqctl để kiểm tra trạng thái của hàng đợi.

Tôi giả định rằng bạn đang chạy ứng dụng này trên Linux. Từ một dòng lệnh, chạy:

rabbitmqctl list_queues 

sẽ cho kết quả:

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

(tốt, nó đã làm trong trường hợp của tôi do hàng đợi cụ thể của tôi)

Trong code của bạn, sử dụng mã này để có được sản lượng rabbitmqctl:

import subprocess 

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

Sau đó, chỉ cần đưa ra mã của riêng bạn để phân tích 0.123.để sử dụng cho riêng bạn.

+0

Đối với tôi, điều này chạy một kịch bản wrapper mà từ chối để tiếp tục nếu tôi không phải là root. Tôi có thể chạy tệp nhị phân cơ bản (/ usr/lib/rabbitmq/bin/rabbitmqctl) trực tiếp, tuy nhiên, nếu tôi đảm bảo rằng tệp ~/.erlang.cookie khớp với RabbitMQ. –

+0

Chạy kết quả 'rabbitmqctl list_queues' trong' Lỗi: không thể nhận ra lệnh' – Cerin

2

Tôi sử dụng https://github.com/bkjones/pyrabbit. Nó nói chuyện trực tiếp với giao diện API của plugin MMMt của RabbitMQ, và rất tiện lợi cho việc thẩm vấn RabbitMQ.

0

pyrabbit không hoạt động tốt cho tôi; Tuy nhiên, Plugin Quản lý chính nó có kịch bản dòng lệnh riêng của mình mà bạn có thể tải về từ GUI quản trị của riêng bạn và sử dụng sau này (ví dụ, tôi đã tải về của tôi từ

http://localhost:15672/cli/ 

sử dụng tại chỗ)

13

Bạn có thể thêm rabbitmq_management Plugin

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

Sau đó sử dụng phần còn lại-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 

tôi đang sử dụng thư viện requests trong ví dụ này, nhưng nó không đáng kể.

Ngoài ra tôi tìm thấy thư viện mà làm điều đó cho chúng ta - pyrabbit

from pyrabbit.api import Client 
cl = Client('localhost:15672', 'guest', 'guest') 
queues = [q['name'] for q in cl.get_queues()] 
Các vấn đề liên quan