어떻게 프로그래밍 방식으로 파이썬 코드를 사용하여 RabbitMQ 브로커에서 생성 된 현재 대기열과 이들에 연결된 작업자 수를 나열 할 수 있습니까?celery - 큐를 프로그램 방식으로 나열합니다.
rabbitmqctl list_queues name consumers
어떻게 프로그래밍 방식으로 파이썬 코드를 사용하여 RabbitMQ 브로커에서 생성 된 현재 대기열과 이들에 연결된 작업자 수를 나열 할 수 있습니까?celery - 큐를 프로그램 방식으로 나열합니다.
rabbitmqctl list_queues name consumers
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()
이것은 내가 가진 해결책이며 나쁘지 않습니다. 내가 가진 유일한 문제는 sudo 명령이고 장고에서 실행하는 것이다. 장고를 sudo 모드로 실행하지 않고도 그렇게 할 수 있습니까? – danielmaxx
django 앱을 실행중인 사용자에게 rabbitmqctl을 실행할 권한을 주거나 sudo를 호출하지 않아도됩니다. – daniula
내가이 방법을하고 웹 페이지 (메시지 준비, 확인되지 않은 등) 모든 큐와 그 세부 사항 표시 -
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보다 내가 가능하게했음을 잊어 버렸다.
client.get_queues ('/')를 호출하려고하면 다음 오류 메시지가 표시됩니다. 파일 "/home/danielmaxx/.virtualenvs/rendit/local/lib/python2.7/site-packages/pyrabbit/http. (오류 : % s % s "% (type (out), out) pyrabbit.http.NetworkError : 오류 :
@ danielmaxx를 거절 한 경우, 제 답변의 업데이트에 게시 된 토끼 mq 용 관리 플러그인이 필요합니다. 관리 플러그인은 pyrabbit에서 사용하는 http API를 제공합니다. 일단 설치하면 언급 한 오류가 발생하지 않습니다. – ksrini
설치했지만 여전히 실패합니다. 아마도 권한과 관련이 있습니까? – danielmaxx
이 방법은 나를 위해 그것을했다 :
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에게 문의하여 감사드립니다.
AMQP 프로토콜로 생성 된 대기열 목록과 같은 정보를 얻는 표준 방법은 없지만 [HTTP API from management plugin] (https://www.rabbitmq.com/management.html)은 필요합니다. – pinepain
as @ zaq178miami HTTP API를 제안합니다. 명령 행을 사용하는 경우 권한 문제가 발생할 수 있으며 RMQ가 설치된 위치에서만 명령을 실행할 수 있습니다. – Gabriele