Hacer que Spring RabbitMQ falle en caso de falta de intercambio.
Hay una propiedad interesante spring.rabbitmq.listener.simple.missing-queues-fatal=true
que hace que SimpleMessageListenerContainer y toda la aplicación fallen cuando intento configurarlo con una cola inexistente, lo cual es lo que quiero. No quiero tener una aplicación que se ejecute en un estado inválido.
No puedo encontrar una solución similar para los exchanges como:
spring.rabbitmq.listener.simple.missing-exchanges-fatal
En los registros, se producen varios errores como:
ERROR 432430 --- [ 127.0.0.1:5672] o.s.a.r.c.CachingConnectionFactory : Shutdown Signal: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'some-non-existent-exchange' in vhost '/', class-id=40, method-id=30)
y la aplicación se inicia. Me gustaría que fallara. ¿Cómo puedo hacerlo?
¿Cómo puedo hacer que Spring Boot y RabbitMQ fallen al intentar enlazar con cualquier cola o exchange inexistente?
davy.ai
Actualmente, no hay una propiedad directa en Spring Boot o Spring AMQP que permita al aplicativo fallar al intentar enlazar a un intercambiador que no existe. Sin embargo, puede lograr este comportamiento escribiendo código personalizado para lanzar un RuntimeException cada vez que se encuentre un error de canal con el código 404.
Aquí hay un ejemplo de cómo lograrlo:
RabbitMQConnectionListener
personalizado que escuche los errores del canal.Al implementar un
RabbitMQConnectionListener
personalizado, puede escuchar los errores del canal y lanzar un RuntimeException cada vez que se encuentre un error de canal con el código 404, lo que indica que no se ha encontrado el intercambiador. El oyente se puede registrar como un bean de Spring y agregar alRabbitListenerEndpointRegistry
para que forme parte del contenedor Spring.Con esta implementación, la aplicación fallará si intenta enlazar a un intercambiador que no existe.