2014-06-11 1 views
2

어떻게 프로그래밍 방식으로 파이썬 코드를 사용하여 RabbitMQ 브로커에서 생성 된 현재 대기열과 이들에 연결된 작업자 수를 나열 할 수 있습니까?celery - 큐를 프로그램 방식으로 나열합니다.

rabbitmqctl list_queues name consumers 
+3

AMQP 프로토콜로 생성 된 대기열 목록과 같은 정보를 얻는 표준 방법은 없지만 [HTTP API from management plugin] (https://www.rabbitmq.com/management.html)은 필요합니다. – pinepain

+1

as @ zaq178miami HTTP API를 제안합니다. 명령 행을 사용하는 경우 권한 문제가 발생할 수 있으며 RMQ가 설치된 위치에서만 명령을 실행할 수 있습니다. – Gabriele

답변

0

rabbitmq 클라이언트로는 pika을 사용할 수 있습니다. 그러나 list_queues 옵션은 없습니다. 가장 쉬운 해결책은 subprocess 사용하여 파이썬에서 rabbitmqctl 명령을 호출하는 것입니다 :

import subprocess 
command = "/usr/local/sbin/rabbitmqctl list_queues name consumers" 
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE) 
print process.communicate() 
+0

이것은 내가 가진 해결책이며 나쁘지 않습니다. 내가 가진 유일한 문제는 sudo 명령이고 장고에서 실행하는 것이다. 장고를 sudo 모드로 실행하지 않고도 그렇게 할 수 있습니까? – danielmaxx

+0

django 앱을 실행중인 사용자에게 rabbitmqctl을 실행할 권한을 주거나 sudo를 호출하지 않아도됩니다. – daniula

2

내가이 방법을하고 웹 페이지 (메시지 준비, 확인되지 않은 등) 모든 큐와 그 세부 사항 표시 -

import kombu 
conn = kombu.Connection(broker_url)# example 'amqp://guest:[email protected]:5672/' 
conn.connect() 
client = conn.get_manager() 
queues = client.get_queues('/')#assuming vhost as '/' 

설치하려면 kombu가 필요하며 대기열은 대기열 이름을 나타내는 키가있는 사전입니다. 셀러리 (셀러리 모니터링에 사용되는 도구) 코드를 파고 들었을 때 이런 생각이 들었습니다.

업데이트 : @ zaq178miami가 지적한대로 http API가있는 관리 플러그인이 필요합니다. 나는 rabbitmq보다 내가 가능하게했음을 잊어 버렸다.

+1

client.get_queues ('/')를 호출하려고하면 다음 오류 메시지가 표시됩니다. 파일 "/home/danielmaxx/.virtualenvs/rendit/local/lib/python2.7/site-packages/pyrabbit/http. (오류 : % s % s "% (type (out), out) pyrabbit.http.NetworkError : 오류 : [Errno 111] ] 연결이 – danielmaxx

+1

@ danielmaxx를 거절 한 경우, 제 답변의 업데이트에 게시 된 토끼 mq 용 관리 플러그인이 필요합니다. 관리 플러그인은 pyrabbit에서 사용하는 http API를 제공합니다. 일단 설치하면 언급 한 오류가 발생하지 않습니다. – ksrini

+0

설치했지만 여전히 실패합니다. 아마도 권한과 관련이 있습니까? – danielmaxx

1

이 방법은 나를 위해 그것을했다 :

def get_queue_info(queue_name): 
    with celery.broker_connection() as conn: 
     with conn.channel() as channel: 
      return channel.queue_declare(queue_name, passive=True) 

이는 이름으로 그 큐의 대기 메시지와 소비자의 수를 namedtuple를 반환합니다.

ksrini 답변도 정확하며 대기열에 대한 추가 정보가 필요할 때 사용할 수 있습니다.

감사합니다. Solem에게 문의하여 감사드립니다.