Servislər bir-birini birbaşa çağırmır, əvəzinə event (hadisə) publish edib, maraqlanan kimsə consume edir. Loose coupling-ın kralıdır.
REST = "Bu işi et" (command). EDA = "Bu iş oldu" (fact/event). Fərq reaksiya əsaslıdır.
Event Producer: Hadisəni yayır. Event Broker: Kafka/RabbitMQ. Event Consumer: Reaksiya verir.
Apache Kafka, RabbitMQ, Spring Cloud Stream, AWS EventBridge, Azure Event Grid.
// Producer — Event göndər
@Service
public class OrderService {
private final StreamBridge streamBridge;
public void placeOrder(Order order) {
orderRepo.save(order);
// Hadisə göndər — kim dinləyirsə dinləsin
streamBridge.send("orderPlaced-out-0",
new OrderPlacedEvent(order.getId(), order.getTotal()));
}
}
// Consumer — Event dinlə (Payment Service-də)
@Configuration
public class PaymentEventConsumer {
@Bean
public Consumer<OrderPlacedEvent> orderPlaced() {
return event -> {
paymentService.processPayment(event.getOrderId(), event.getTotal());
};
}
}