@KafkaListener
@KafkaListener — одна аннотация заменяет весь ручной код Consumer’а (см. тему «Producer и Consumer») — poll(), цикл обработки, парсинг сообщений Spring берёт на себя.
@Component
class OrderEventListener {
@KafkaListener(topics = "orders", groupId = "email-service")
void handleOrder(String message) {
sendConfirmationEmail(message); // вызывается автоматически на каждое новое сообщение
}
}
Для отправки сообщений — аналогично упрощённый KafkaTemplate вместо ручного KafkaProducer:
@Service
class OrderService {
private final KafkaTemplate<String, String> kafkaTemplate;
void createOrder(Order order) {
// ... сохранили заказ ...
kafkaTemplate.send("orders", order.getId(), orderToJson(order));
}
}
Копнуть глубже
Десериализация в объект, а не строку — Spring сам распарсит JSON в нужный класс:
@KafkaListener(topics = "orders", groupId = "email-service")
void handleOrder(Order order) { // Spring сам десериализует JSON в Order
sendConfirmationEmail(order);
}
Требует настройки JsonDeserializer в конфигурации, но дальше код становится типизированным и чище — не нужно вручную парсить JSON в каждом обработчике.
@KafkaListener на нескольких топиках сразу:
@KafkaListener(topics = {"orders", "refunds"}, groupId = "notifications")
void handleEvent(String message) { ... }
Конфигурация подключения обычно выносится в application.yml:
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: email-service
🎤 Закрыл тему, если можешь объяснить:
• что упрощает `@KafkaListener` по сравнению с ручным Consumer API;
• как настроить автоматическую десериализацию JSON в объект (если дошёл до 2-го слоя).
• как настроить автоматическую десериализацию JSON в объект (если дошёл до 2-го слоя).