Почему я не могу обработать сообщение Kafka?

#java #spring #apache-kafka

#java #spring #apache-kafka

Вопрос:

У меня есть общее Message<> сообщение, отправленное через шаблон Kafka (kafkaTemplate.send(topic, message)) , но на стороне потребителя у меня такая ошибка при обработке отправленного сообщения:

 there is no default constructor available in 'org.springframework.messaging.support.GenericMessage'
  

Как я могу его добавить и почему я должен это делать? Я думал, что это должно работать из коробки?

 public void publishEvent(Event createdEvent) {
    String topic = structureTask.getType();

    Message<TaskCreatedEvent> message = MessageBuilder.withPayload(
            TaskCreatedEvent.builder().taskId(createdEvent.getId()).build()).build();

    ListenableFuture<SendResult<String, Message<?>>> future = kafkaTemplate.send(topic, message);
    future.addCallback(new ListenableFutureCallback<>() {
        @Override
        public void onSuccess(SendResult<String, Message<?>> result) {
            log.debug("Sent {} with offset={}", message, result.getRecordMetadata().offset());
        }

        @Override
        public void onFailure(Throwable ex) {
            log.debug("Unable to send {} due to: {}", message, ex.getMessage());
        }
    });
}
  

Комментарии:

1. Можете ли вы предоставить подробную информацию о коде? 🙂

2. Конечно, сообщение<Событие> message = MessageBuilder.withPayload(Event.builder().id(event.getId()).build()).build(); ListenableFuture<SendResult<Строка, сообщение<?>>> future = KafkaTemplate.send(ТЕМА, сообщение);

3. как исключение: Event у DTO нет конструктора по умолчанию. Можете ли вы указать код события?

4. Поскольку для отправки сообщения в kafka, kafkatemplate преобразует универсальный класс с помощью отражения, также требуется Event наличие конструктора по умолчанию. Вы пытаетесь добавить конструктор по умолчанию для решения проблемы?

5. Не могли бы вы дополнить свой вопрос примерами кода?