Динамический Spring Kafka Listener - PullRequest
0 голосов
/ 05 марта 2019

Я использую Spring Kafka с SPEL и пытаюсь слушать разные темы на основе значения, представленного в одном из файлов свойств.

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

Теперь здесь getTopics возвращает карту.

Все работает нормально, когда мне возвращается строка String [] изget ().

Но в случае, если get () возвращает "", т.е. я не хочу подписываться на какую-либо тему, возникает некоторая проблема.

Я получаю IllegalTopicException, Неверная тема '' .

Есть ли способ решить эту проблему, если я не хочу слушать какую-либо тему во время выполнения?

1 Ответ

0 голосов
/ 05 марта 2019

У @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() в качестве условия, чтобы определить, нужно ли вам запускать этот контейнер или нет.Только если контейнер запущен, он подписывается на темы, для которых он настроен.

...