Search code examples
spring-integration

Stop RabbitMq listeners during run time


My beans/listeners are built using IntegrationFlows

ex.

  @Bean
  IntegrationFlow registerDevices() {
     return IntegrationFlows
        .from(adapter)
        .channel(channel)
        .get();
  }

there is such a way to stop listeners after something happens, endpoint call/event

RabbitListenerEndpointRegistry does not work, because I'm not using @RabbitListener

There is the possibility to set autostart up - false, but then how to manipulate it nicely during runtime?


Solution

  • First of all, please, be careful when you choose tags for your questions over here. You concern so far really belongs to Spring Integration and has nothing to do with Spring AMQP. Although you are right: the lifecycle control really goes in the end to the ListenerContainer from Spring AMQP.

    Anyway: the end-user API for your use-case is a part of Spring Integration logic.

    See the second argument of that from():

    .from(adapter, e -> e.id("myAmqpAdapter"))
    

    So, having that id yo are able to reach your AmqpInboundChannelAdapter (implement a Lifecycle) at runtime and stop & start it whenever you need.

    See more in docs:

    https://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-dsl-endpoints

    And this pattern is also good to have on board:

    https://docs.spring.io/spring-integration/docs/current/reference/html/system-management.html#control-bus