Ответ
Да, есть опыт реализации EDA в Spring-приложениях и микросервисах.
Реализация и инструменты:
- В рамках одного приложения: Использовал Spring Events для слабой связности компонентов.
- Межсервисное взаимодействие: Применял брокеры сообщений Apache Kafka и RabbitMQ для асинхронной и надежной передачи событий между микросервисами.
Пример использования Spring Events:
// 1. Определение события
public class OrderCreatedEvent {
private final Order order;
public OrderCreatedEvent(Order order) { this.order = order; }
public Order getOrder() { return order; }
}
// 2. Публикация события
@Service
public class OrderService {
private final ApplicationEventPublisher publisher;
public void createOrder(Order order) {
// ... логика сохранения заказа ...
publisher.publishEvent(new OrderCreatedEvent(order));
}
}
// 3. Обработка (подписка) на событие
@Component
public class NotificationService {
@EventListener
@Async // Для асинхронной обработки
public void handleOrderCreated(OrderCreatedEvent event) {
// Логика отправки уведомления о новом заказе
System.out.println("Notification sent for order: " + event.getOrder().getId());
}
}
Преимущества EDA:
- Слабая связность: Сервисы не знают друг о друге, общаясь только через события.
- Масштабируемость: Потребители событий могут масштабироваться независимо.
- Отказоустойчивость: Брокеры сообщений (Kafka) обеспечивают сохранность событий и возможность повторной обработки.