Necesito tener un cliente de python que pueda descubrir las colas en un intercambio de servidor RabbitMQ reiniciado, y luego iniciar un cliente para reanudar el consumo de mensajes de cada cola. ¿Cómo puedo descubrir colas de alguna api/biblioteca compatible con RabbitMQ?¿Cómo puedo listar o descubrir colas en un intercambio de RabbitMQ usando Python?
Respuesta
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.
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.
Puesto que soy un principiante RabbitMQ, tomar esto con un grano de sal, pero hay una interesante Management Plugin, que expone una interfaz HTTP para "A partir de aquí se puede gestionar intercambios, colas, fijaciones, hosts virtuales, usuarios y Permisos. Afortunadamente, la IU es bastante autoexplicativa ".
http://www.rabbitmq.com/blog/2010/09/07/management-plugin-preview-release/
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.
Yo uso https://github.com/bkjones/pyrabbit. Se trata directamente con la interfaz API del complemento mgmt de RabbitMQ, y es muy útil para interrogar a RabbitMQ.
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)
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()]
- 1. Uso de colas exclusivas + duraderas, para RabbitMQ
- 2. Lectura de múltiples colas, RabbitMQ
- 3. Intercambio de MSMQ para RabbitMQ en NServiceBus
- 4. Hace RabbitMq hacer round-robin desde el intercambio a las colas
- 5. Intercambio de temas con Apio y RabbitMQ
- 6. usando comodín al listar directorios en python
- 7. RabbitMQ: intercambios, colas y enlaces: ¿quién configura qué?
- 8. RabbitMQ Intercambios de tema: 1 Intercambio vs Muchos intercambios
- 9. Grupos de trabajadores y colas de múltiples usuarios con RabbitMQ
- 10. ¿Cómo hacer que las colas RabbitMQ conmuten por error?
- 11. Objeto de intercambio (instancia de clase) en python usando Managers
- 12. ¿Cómo se pueden hacer colas privadas/seguras en RabbitMQ en un sistema multiusuario?
- 13. ¿Cómo retractar un mensaje en RabbitMQ?
- 14. ¿Hay alguna forma de enumerar las colas en un rabbitmq vía pika?
- 15. La consola web de administración RabbitMQ no muestra colas o intercambios
- 16. Programas de desacoplamiento usando colas
- 17. ¿Cómo puedo listar variables globales en MATLAB?
- 18. ¿Cómo puedo agrupar canales en rabbitmq?
- 19. Tema Exchange vs Direct Exchange en RabbitMQ
- 20. ¿Cómo puedo descubrir las clases en un paquete específico en Python?
- 21. Python: OpenMPI vs. RabbitMQ
- 22. ¿Cómo puedo descubrir la "ruta" de un recurso incrustado?
- 23. Cómo descubrir el rol actual en Python Fabric
- 24. ¿Cómo manejar AssertionError en Python y descubrir en qué línea o enunciado se produjo?
- 25. Colas de espera y colas en C#
- 26. ¿Cómo puedo descubrir recursos en un contenedor Java con un nombre de comodín?
- 27. RabbitMQ negarse a iniciar RabbitMQ
- 28. Descubrir errores de NullPointerException usando FindBugs
- 29. ¿Cómo puedo iniciar sesión en un sitio web usando Python?
- 30. RabbitMQ y node-amqp: el intercambio en modo confirmado no confirma, ¿por qué?
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. –
Ejecutando 'rabbitmqctl list_queues' da como resultado' Error: no se pudo reconocer el comando' – Cerin