Ответ
Событийно-управляемая архитектура (EDA) — это паттерн, в котором компоненты системы взаимодействуют через асинхронную публикацию и обработку событий. Её основные принципы:
- События как первоклассные сущности: Событие — это неизменяемый (immutable) объект-сообщение, фиксирующий факт изменения состояния.
- Слабая связанность (Loose Coupling): Производители событий (publishers) и их потребители (subscribers/consumers) не знают друг о друге. Они взаимодействуют только через канал событий (event bus/broker).
- Асинхронность: Publisher не блокируется, ожидая обработки события. Это повышает отзывчивость и масштабируемость.
- Доставка «от одного ко многим» (Pub/Sub): Одно событие может быть обработано несколькими независимыми подписчиками.
Базовая реализация на Spring:
// 1. Определение события
public class OrderCreatedEvent {
private final String orderId;
private final Instant timestamp;
// Конструктор, геттеры (поля final)
}
// 2. Publisher (Производитель)
@Component
public class OrderService {
private final ApplicationEventPublisher publisher;
public OrderService(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
public void createOrder(String orderId) {
// ... логика создания заказа
publisher.publishEvent(new OrderCreatedEvent(orderId, Instant.now()));
}
}
// 3. Subscribers (Потребители)
@Component
public class NotificationService {
@EventListener
public void handleOrderCreated(OrderCreatedEvent event) {
// Отправить уведомление клиенту
}
}
@Component
public class InventoryService {
@Async // Обработка может быть асинхронной
@EventListener
public void reserveStock(OrderCreatedEvent event) {
// Зарезервировать товар на складе
}
}
Преимущества EDA: Масштабируемость, отказоустойчивость (через persistent event logs), гибкость в добавлении новой обработки. Сложности: Отладка распределенного потока событий, обеспечение идемпотентности обработки.