Как передать динамическое имя темы в @kafkalistener (темы из переменной среды - PullRequest
0 голосов
/ 04 января 2019

Я ПИШУ ПОТРЕБИТЕЛЯ КАФКИ Я хочу передать имя темы переменной среды в @kafkalistener (themes = topic

 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.kafka.annotation.KafkaListener; 
 import org.springframework.stereotype.Service;

 @Service
 public class KafkaConsumer {

 @Autowired
 private EnvProperties envProperties;

 private final String topic = envProperties.getTopic();

 @KafkaListener(topics = "#{'${envProperties.getTopic()}'}", 
 groupId = "group_id")
   public void consume(String message){
    logger.info("Consuming messages " +envProperties.getTopic());
   }
  }

themes = "# {'$ {envProperties.getTopic ()}'}" На этой линии ОШИБКА. МОЯ ЗАЯВКА НЕ МОЖЕТ НАЧАТЬСЯ. КАК УСТАНОВИТЬ ЭТУ ТЕМУ ИМЯ ДИНАМИЧЕСКИ ИЗ ПЕРЕМЕННОЙ ОКРУЖАЮЩЕЙ СРЕДЫ.

1 Ответ

0 голосов
/ 04 января 2019

Обычно вы не можете ссылаться на поля или свойства компонента, в котором объявлен SpEL. Однако @KafkaListener имеет специальный синтаксис для его поддержки.

См. Документацию .

Начиная с версии 2.1.2, выражения SpEL поддерживают специальный токен __listener, который представляет собой псевдо-имя компонента, представляющее текущий экземпляр компонента, в котором существует эта аннотация.

Итак, если вы добавите public EnvProperties getEnvProperties() в класс, то что-то вроде

#{__listener.envProperties.topic}

должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...