2010-11-26 22 views

Respuesta

17

Por lo que sé, no hay ninguna manera de hacer esto. Eso no tiene nada que ver con Python, sino porque AMQP no define ningún método de descubrimiento de cola.

En cualquier caso, en AMQP son los clientes (consumidores) los que declaran colas: los editores publican mensajes en un intercambio con una clave de enrutamiento y los consumidores determinan a qué colas van esas claves de enrutamiento. Por lo tanto, no tiene sentido hablar de colas en ausencia de consumidores.

1

Las funciones de administración vencen en una versión futura de AMQP. Entonces, por ahora, tendrá que esperar hasta una nueva versión que vendrá con esa funcionalidad.

33

No parece ser un AMQP vía directa para administrar el servidor, pero hay una manera usted puede hacerlo desde Python. Recomendaría utilizar un módulo del subproceso combinado con el comando rabbitmqctl para verificar el estado de las colas.

Supongo que está ejecutando esto en Linux. Desde una línea de comandos, en ejecución:

rabbitmqctl list_queues 

se traducirá en:

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

(así, lo hizo en mi caso, debido a mis colas específicas)

En su código, utilice el código para obtener una salida de rabbitmqctl:

import subprocess 

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

Entonces, simplemente subir con su propio código para analizar stdout_value para su propio uso.

+0

Para mí, esto se ejecuta un guión envoltorio que se niega a continuar si no soy raíz. Puedo ejecutar el binario subyacente (/ usr/lib/rabbitmq/bin/rabbitmqctl) directamente, sin embargo, si me aseguro de que mi ~/.erlang.cookie archivo coincide con RabbitMQ. –

+0

Ejecutando 'rabbitmqctl list_queues' da como resultado' Error: no se pudo reconocer el comando' – Cerin

0

pyrabbit no funcionó tan bien para mí; Sin embargo, el propio plugin de Gestión tiene su propia secuencia de línea de comandos que se puede descargar desde su propia GUI de administración y utilizar más adelante (por ejemplo, he descargado mío de

http://localhost:15672/cli/ 

para uso local)

13

Puede añadir plug-in rabbitmq_management

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

A continuación, utilice resto-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 

I Estoy usando la biblioteca requests en este ejemplo, pero no es significativa.

También encontré biblioteca que lo haga por nosotros - pyrabbit

from pyrabbit.api import Client 
cl = Client('localhost:15672', 'guest', 'guest') 
queues = [q['name'] for q in cl.get_queues()] 
Cuestiones relacionadas