Может быть, не публично или недействительно? использование spring websocket и kafka

Поскольку я пытаюсь использовать данные из темы (название темы зависит от пользователя), и во время выполнения я пытаюсь получить сообщение из темы, но получаю следующую ошибку.

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'consumerProperties' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' - maybe not public or not valid?

Вот мой код

@Service
public class kafkaConsumerService {


    private SimpMessagingTemplate template;

     KafkaConsumerProperties consumerProperties;

     @Autowired
    public kafkaConsumerService(KafkaConsumerProperties consumerProperties, SimpMessagingTemplate template) {
         this.consumerProperties=consumerProperties;
         this.template=template;
    }

    @KafkaListener(topics = {"#{consumerProperties.getTopic()}"})
    // @KafkaListener(topics="Chandan3706")
    public void consume(@Payload Message message) {
        System.out.println("from kafka topic::" + message);
        template.convertAndSend("/chat/getMessage", message);
    }

}

Мой KafkaConsumerProperties.class

@Component
@ConfigurationProperties(prefix="kafka.consumer")
public class KafkaConsumerProperties {

    private String bootStrap;
    private String group;
    private String topic;

    public String getBootStrap() {
        return bootStrap;
    }

    public void setBootStrap(String bootStrap) {
        this.bootStrap = bootStrap;
    }

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }

    public String getTopic() {
        return topic;
    }

    public void setTopic(String topic) {
        this.topic = topic;

    }

    @Override
    public String toString() {
        return "KafkaConsumerProperties [bootStrap=" + bootStrap + ", group=" + group + ", topic=" + topic + "]";
    }
}

заранее спасибо

1
0
2 122
1

Ответы 1

Поскольку вы не указываете имя bean-компонента для вашего компонента KafkaConsumerProperties, по умолчанию используется имя имя класса без заглавных букв. Это один.

Выражение, которое вы используете в @KafkaListener, - это обычный выражение фазы определения компонента, поэтому корневой объект - это некий BeanExpressionContext, но не ваш bean-компонент-слушатель, когда вы пытаетесь получить доступ через свойство.

Не уверен, нужно ли вам это свойство KafkaConsumerProperties в этом слушателе, но выражение должно запрашивать bean-компонент kafkaConsumerProperties:

@Service
public class kafkaConsumerService {


    private SimpMessagingTemplate template;

     @Autowired
    public kafkaConsumerService(SimpMessagingTemplate template) {
         this.template=template;
    }

    @KafkaListener(topics = {"#{kafkaConsumerProperties.topic}"})
    // @KafkaListener(topics="Chandan3706")
    public void consume(@Payload Message message) {
        System.out.println("from kafka topic::" + message);
        template.convertAndSend("/chat/getMessage", message);
    }

}

Не могли бы вы поделиться каким-нибудь рабочим кодом, который может мне помочь в этом случае?

Chandan Mishra 11.09.2018 15:05

Подождите: я полностью объяснил вам, что не так с вашим кодом, и показал, как исправить. Не уверен, что еще вы хотели бы услышать от нас. Никто здесь не собирается писать для вас код. Документы по этому вопросу находятся здесь: docs.spring.io/spring-kafka/docs/2.1.10.RELEASE/reference/ht‌ ml /…

Artem Bilan 11.09.2018 15:47

Я хотел, чтобы ваш ответ был более ясным, поскольку ваш ответ бессмысленен, и, прежде чем делать какие-либо выводы, я хотел быть уверенным .... Как и в моем случае, я уже создал bean-компонент для класса KafkaConsumerProperties. И только проблема, с которой я столкнулся, связана с языком Spring Expressions

Chandan Mishra 12.09.2018 15:30

OK. Я добавил ссылки на Документы всякий раз, когда это необходимо для подтверждения моих комментариев, и добавил полностью измененный ваш класс kafkaConsumerService, чтобы показать, как это должно быть настроено.

Artem Bilan 12.09.2018 15:59

Другие вопросы по теме