Pregunta

Tengo algunos scripts, usando pika.SelectConnection para comunicarme con el servidor RabbitMq.

¿Hay alguna forma de hacer que esos scripts que intentan volver a conectarse automáticamente al servidor rmq, en caso de que el servidor se caiga, mientras el script funciona?

¿Fue útil?

Solución

Tengo muchos scripts que utilizan el siguiente enfoque para volver a conectarse:

 while True:
     try:
         mqExch.channel.connection.drain_events(timeout=25)
     except socket.timeout:
         hb.beat() # let our supervisor know we are not hung

No se usa pika, sino Kombu, sin embargo, los principios se pueden aplicar.El método drain_events es el núcleo del consumo de mensajes, es decir, se repite para siempre recibiendo mensajes y ejecutando una devolución de llamada para procesar el mensaje.Como puede ver aquí, tengo el tiempo de espera de la biblioteca de sockets de bajo nivel cada 25 segundos.Con algunas bibliotecas tuve que parchear un par de líneas de código para que este comportamiento funcionara sin fallar dentro del módulo.

En cualquier caso, el latido enviado por hb.beat es monitoreado por un proceso supervisor y este proceso matará el script si hay demasiadas fallas en un lapso de tiempo demasiado corto.Después de matar el guión, el supervisor lo reinicia.Esto ha funcionado bien al tratar con errores de red intermitentes o reinicios del broker MQ.Si bien podría haber hecho que mi script se reconectara, fue más simple de matar y reiniciar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top