Tengo un programa simple de prueba RabbitMQ que encola aleatoriamente mensajes, y otro que los lee, todos usando Spring-AMQP. Si el consumidor fallece (por ejemplo, al matar un proceso sin tener la oportunidad de cerrar su conexión o canal), cualquier mensaje que no haya reconocido no se reconocerá para siempre.cuando muere un canal AMQP/RabbitMQ sin conexiones?
He visto varias referencias (por ejemplo, this question) que dicen que el canal muere cuando no tiene conexiones, y que los mensajes restantes no recuperados se volverán a entregar. Ese no es el comportamiento que veo, en su lugar recibo una creciente lista de canales marcados como IDLE y una lista creciente de conexiones marcadas en ejecución pero sin actividad.
¿Se requiere alguna configuración para observar que las conexiones están muertas una vez que el proceso ha sido cancelado?
EDIT: estaba corriendo el servidor RabbitMQ dentro de una máquina virtual VirtualBox, que al parecer no maneja las conexiones entrantes muertos correctamente a través de NAT. Esto funciona bien con el servidor mq ejecutándose directamente en el host físico.
FYI: Estaba teniendo un problema similar cuando las colas exclusivas no se limpiaban en el intermediario de manera oportuna después de que el consumidor exclusivo fallece. Esto evitó que estos componentes con nombres deterministas comenzaran. Se resolvió estableciendo 'ConnectionFactory.RequestedHeartbeat' en un valor pequeño (segundos) – drstevens