Spring Kafka — KafkaTemplate để produce, @KafkaListener để consume.
Thêm dependency spring-kafka, config qua spring.kafka.* (bootstrap-servers, consumer group-id, JSON serializer/deserializer).
java
// Producer
@Service
class OrderEventPublisher {
private final KafkaTemplate<String, OrderEvent> kafkaTemplate;
public void publish(Order order) {
kafkaTemplate.send("order-events", order.getId().toString(),
new OrderEvent(order.getId(), "ORDER_CREATED"))
.whenComplete((result, ex) -> { if (ex != null) log.error("Send failed", ex); });
}
}
// Consumer
@KafkaListener(topics = "order-events", groupId = "inventory-service")
public void handle(OrderEvent event) {
inventoryService.reserve(event.getOrderId());
}Key của message (order.getId()) quyết định partition → message cùng order luôn cùng partition, giữ thứ tự.
Error handling: @RetryableTopic — retry tự động với backoff, đẩy vào Dead Letter Topic sau max retries.