Estoy probando RabbitMQ con this enlace de pitón.¿Cómo configurar la detección de tiempo de espera en un servidor RabbitMQ?
Una cosa que noté es que si mato imprudentemente a un consumidor (emulando un programa bloqueado), el servidor pensará que este consumidor todavía está allí por un largo tiempo. El resultado de esto es que cualquier otro mensaje será ignorado.
Por ejemplo, si mata a un consumidor 1 vez y lo vuelve a conectar, se ignorarán 1/2 mensajes. Si mata a otro consumidor, se ignorarán 2/3 mensajes. Si matas a un tercero, entonces se ignorarán 3/4 mensajes, y así sucesivamente.
He intentado activar los reconocimientos, pero no parece estar ayudando. La única solución que he encontrado es detener manualmente el servidor y restablecerlo.
¿Hay una manera mejor?
cómo volver a crear este escenario
Run RabbitMQ.
Desarchivar this library.
Descargue el consumidor y el editor here. Ejecute amqp_consumer.py dos veces. Ejecute amqp_publisher.py, agregue algunos datos y observe que funciona como se esperaba. Los mensajes se reciben al estilo de todos contra todos.
Mata uno de los procesos del consumidor con kill -9 o administrador de tareas.
Ahora cuando publique un mensaje, se perderá el 50% de los mensajes.
He actualizado mi respuesta. –
No puedo reproducir esto. ¿Qué versión de Linux estaba usando? –
Buena pregunta: este es un problema crítico si se ejecuta detrás de un cortafuegos o un dispositivo de equilibrio de carga IP que suelta conexiones inactivas después de N segundos, porque ni RabbitMQ ni el cliente serán informados de que el socket se ha ido lejos hasta que intenten usarlo. –