如何禁用 Spring Cloud Stream Kafka 消费者

How to disable a Spring Cloud Stream Kafka consumer

这是我的情况:

我们有一个 Spring 云 Stream 3 Kafka 服务连接到同一代理中的 多个主题 ,但我想根据属性控制到特定主题的连接。

每个主题都有自己的绑定器和绑定,但代理对所有人都是一样的。

我尝试使用下面的 属性 禁用绑定(这是我迄今为止找到的唯一解决方案),这适用于 StreamListener 不接收消息,但与主题的连接和重新平衡仍然存在正在发生。

spring:
  cloud:
    stream:
      bindings:
        ...
        anotherBinding:
          consumer:
            ...
            autostartup: false
  

我想知道活页夹级别是否有任何设置阻止它启动。其中一个主题消费者应该只在一种环境中可用。

谢谢

通过将 autoStartup 设置为 false 来禁用绑定应该可行,我不确定问题出在哪里。

看起来您使用的不是新功能模型,而是 StreamListener。如果您使用的是功能模型,那么您可以尝试另一件事。您可以通过在 运行 时不包括相应的功能来禁用绑定。例如,假设您有以下两个消费者。

@Bean
public Consumer<String> one() {}

@Bean
public Consumer<String> two() {}

当运行安装此应用程序时,您可以提供属性 spring.cloud.function.definition 到include/exclude 功能。例如,当你 运行 它与 spring.cloud.function.definition=one 时,消费者 two 根本不会被激活。当运行spring.cloud.function.definition=two时,则消费者one不会被激活。

上述方法的缺点是,如果您决定在应用程序启动后启动其他功能(假设 autoStartupfalse 在其他功能上),它将无法正常工作通过 spring.cloud.function.definition 不是原始绑定的一部分。但是,根据您的要求,这可能不是问题,因为您知道相应主题针对哪些环境。换句话说,如果您知道消费者 one 需要始终从主题 one 消费,那么您就不会将消费者 two 作为定义的一部分。