动态Spring Kafka监听器

时间:2019-03-04 21:38:38

标签: apache-kafka spring-kafka spring-el

我正在使用带有SPEL的spring kafka,并尝试根据其中一个属性文件中的值来收听不同的主题。

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

现在,这里的getTopics返回一个Map。

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

但是,如果get()返回“”,即我不想订阅任何主题,所以有一些问题。

我收到IllegalTopicException。 无效的主题”

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

1 个答案:

答案 0 :(得分:2)

@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()作为条件来确定是否需要启动该容器。仅当容器启动时,它才会订阅为其配置的主题。