Как правильно отправлять сообщения из Java Springboot в кафку?

Вопрос такой . При обращении к сервису я получаю тело ответа. Мне нужно его переслать в существующий топик кафки. Пока натолкнулся лишь на примеры создания класса продюсера , в котором нужно определить все поля соответствующие тому сообщению, которое я хочу послать в топик кафки. Но в моем случае это примерно сотня полей, разной степени вложенности. Могу ли я как то просто взять тело ответа и строкой отправить топик кафки, не создавая никаких дополнительных классов ?

На данный момент application.yml выглядит так :

  events:
    enabled: true
    kafka.url: ......
    produces:
      - package bft.com.needy_registry.kafka.events.FamilyRequestScmzToRpuEvent
    kafka:
      idempotency-enabled: false

Могу ли я не определять в application.yml поле produces а просто послать сообщение в нужный топик?


Ответы (1 шт):

Автор решения: talex moved to Codidact

Для начало нужно определить пару бинов

@Bean
public ProducerFactory<UUID, String> producerFactory() {
    return new DefaultKafkaProducerFactory<>(
        properties.buildProducerProperties(),
        new UUIDSerializer(),
        new StringSerializer()
    );
}

@Bean
public KafkaTemplate<UUID, String> kafkaTemplate() {
    return new KafkaTemplate<>(producerFactory());
}

Затем в нужном месте инжектим темплейт

@Qualifier("kafkaTemplate")
private final KafkaTemplate<UUID, Strin> kafkaTemplate;

и посылаем сообщение

    List<Header> headers = new ArrayList<>();
    ProducerRecord<UUID, String> record = new ProducerRecord<>(topicName, null, messageId, message, headers);
    kafkaTemplate.send(record);
→ Ссылка