Event-Driven Architecture is an architectural style in which components communicate by emitting and reacting to events instead of calling each other directly, with Gregor Hohpe and Bobby Woolf (2003) and Martin Fowler (2017) as key proponents. Producers publish events without knowing their consumers, and message queues decouple both sides in time. Most messaging systems deliver at least once, which requires idempotent consumers, and state becomes eventually consistent; workflows run by choreography or orchestration.
Event-Driven Architecture
Details
- Also known as
-
EDA, Message-Driven Architecture
Core Concepts:
- Event producers and consumers
-
Components communicate by emitting and reacting to events rather than direct calls
- Publish-subscribe
-
Producers publish events without knowing which consumers will process them
- Asynchronous decoupling
-
Sender and receiver operate independently in time; no blocking request-response
- Message queue
-
Intermediary that buffers events between producers and consumers (SQS, RabbitMQ, Kafka)
- At-least-once delivery
-
Most messaging systems guarantee delivery but may deliver duplicates, requiring idempotent consumers
- Eventual consistency
-
System state converges over time rather than being immediately consistent after each operation
- Event notification
-
Lightweight event signals that something happened; consumers decide whether to act
- Event-carried state transfer
-
Events carry enough data for consumers to process without calling back to the producer
- Choreography vs. orchestration
-
Events can trigger distributed workflows implicitly (choreography) or via a central coordinator (orchestration)
- Key Proponents
-
Gregor Hohpe, Bobby Woolf ("Enterprise Integration Patterns", 2003), Martin Fowler ("What do you mean by Event-Driven?", 2017)
When to Use:
-
Systems requiring loose coupling between components
-
Workloads with asynchronous processing pipelines
-
Architectures that need independent scaling of producers and consumers
-
Distributed systems where components must evolve independently
Related Anchors:
-
Domain-Driven Design - Domain events are a DDD building block
-
Hexagonal Architecture - Message queues as driven adapters
-
Clean Architecture - Events cross architectural boundaries via interfaces