Отправка: внедряем
KafkaTemplate и указываем топик:
@Service
@RequiredArgsConstructor
public class EventPublisher {
private final KafkaTemplate<String, String> kafka;
public void publish(String orderId) {
kafka.send("orders", orderId, "created");
}
}
Получение: добавляем
@KafkaListener к методу:
@Component
public class EventConsumer {
@KafkaListener(
topics = "orders",
groupId = "order-service"
)
public void consume(String event) {
System.out.println(event);
}
}
Настройки подключения и сериализации задаём через
spring.kafka.*:
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
Spring Boot берёт на себя настройку стандартных компонентов интеграции при наличии нужных зависимостей.
Но `send()` работает асинхронно: вызов метода ещё не означает, что брокер подтвердил запись. В рабочем приложении нужно обрабатывать результат отправки, а на стороне потребителя — ошибки и повторную доставку.