Detener los oyentes de RabbitMQ durante la ejecución
Mis beans/listeners son construidos utilizando IntegrationFlows
Ejemplo:
@Bean
IntegrationFlow registerDevices() {
return IntegrationFlows
.from(adapter)
.channel(channel)
.get();
}
Existe una manera de detener los listeners después de que ocurra algo, como una llamada a un endpoint o un evento.
RabbitListenerEndpointRegistry no funciona, porque no estoy usando @RabbitListener.
Existe la posibilidad de configurar autostart a false, pero ¿cómo manipularlo de manera adecuada durante la ejecución?
davy.ai
Sí, hay una manera de detener los oyentes en Spring Integration usando las
IntegrationFlow
. Puedes establecer la propiedadautoStartup
enfalse
al definir el flujo, y luego manipularlo durante la ejecución con unLifecycleProcessor
.Aquí tienes un ejemplo:
En este ejemplo, definimos un
IntegrationFlow
conautoStartup(false)
. También definimos unLifecycleProcessor
, que utilizamos para iniciar y detener el flujo durante la ejecución. Ten en cuenta que llamar astop()
en elLifecycleProcessor
detendrá todos los flujos conautoStartup = true
, así que asegúrate de usarlo solo si deseas detener todos los flujos en el contexto.Para iniciar y detener un flujo específico, puedes hacer algo como esto:
En este caso, también inyectamos el
SmartLifecycle
de nuestro flujo específico, que podemos usar para detenerlo e iniciarlo individualmente.