动态 Spring Kafka 侦听器

Dynamic Spring Kafka Listener

我正在将 spring kafka 与 SPEL 一起使用,并尝试根据 属性 文件之一中存在的值来收听不同的主题。

@KafkaListener(topics="#{kafkaTopics.getTopics().get('${key.in.property}')}")

现在 getTopics 正在返回 .

的地图

当我从 get() 返回一些 String[] 时一切正常。

但是,如果 get() 返回 "",即我不想订阅任何主题,然后有一些问题。

我收到 IllegalTopicException。 无效主题“”

如果我不想在运行时听任何话题,有什么办法可以解决这个问题?

@KafkaListener有这个选项:

/**
 * Set to true or false, to override the default setting in the container factory. May
 * be a property placeholder or SpEL expression that evaluates to a {@link Boolean} or
 * a {@link String}, in which case the {@link Boolean#parseBoolean(String)} is used to
 * obtain the value.
 * <p>SpEL {@code #{...}} and property place holders {@code ${...}} are supported.
 * @return true to auto start, false to not auto start.
 * @since 2.2
 */
String autoStartup() default "";

因此,您可以使用 kafkaTopics.getTopics().get() 作为条件来确定是否需要启动该容器。仅当容器启动时,它才会订阅为其配置的主题。