在 运行 时间内停止 RabbitMq 侦听器

Stop RabbitMq listeners during run time

我的 beans/listeners 是使用 IntegrationFlows

构建的

例如

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

有这样一种方法可以在发生某些事情后停止监听器,端点call/event

RabbitListenerEndpointRegistry 不起作用,因为我没有使用 @RabbitListener

可以设置autostart up - false,但如何在运行时很好地操作它?

首先,请在此处为您的问题选择标签时要小心。您目前关注的确实属于 Spring Integration,与 Spring AMQP 无关。虽然你是对的:生命周期控制实际上最终进入 Spring AMQP 的 ListenerContainer

无论如何:您的用例的最终用户 API 是 Spring 集成逻辑的一部分。

查看 from() 的第二个参数:

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

因此,拥有 id 你可以在运行时到达你的 AmqpInboundChannelAdapter(实现 Lifecycle)并在你需要时停止和启动它。

在文档中查看更多信息:

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

而且这种模式也很适合在船上使用:

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