Ответ
Да. В микросервисной архитектуре проекта мы использовали Apache Kafka в качестве шины событий для асинхронного и отказоустойчивого обмена сообщениями.
Зачем это было нужно?
- Снижение связности: Сервисы общались через события, а не через прямые HTTP-вызовы.
- Масштабируемость: Позволяло независимо масштабировать производителей (producers) и потребителей (consumers) событий.
- Надежность: Kafka гарантирует сохранение и доставку сообщений.
Практический пример (Spring Boot + Kafka):
// Producer: Сервис заказов публикует событие
@Service
public class OrderService {
@Autowired
private KafkaTemplate<String, OrderCreatedEvent> kafkaTemplate;
public void createOrder(Order order) {
// ... бизнес-логика
OrderCreatedEvent event = new OrderCreatedEvent(order.getId());
kafkaTemplate.send("order-events", event); // Отправка в топик
}
}
// Consumer: Сервис нотификаций подписан на события
@Service
public class NotificationService {
@KafkaListener(topics = "order-events")
public void handleOrderEvent(OrderCreatedEvent event) {
// Асинхронная обработка: отправка email клиенту
emailService.sendOrderConfirmation(event.getOrderId());
}
}
Такой подход позволил эффективно организовать workflow, например, для обработки заказов, обновления инвентаря и отправки уведомлений.