Observer Pattern in Microservices
Learn how the Observer Pattern evolves in Microservices using Event-Driven Architecture, Kafka, RabbitMQ, asynchronous communication, publish-subscribe messaging, Spring Boot integration, and enterprise architecture.
Observer Pattern in Microservices
What You Will Learn
- What is Observer Pattern?
- Why Traditional Observer Fails in Microservices
- Observer Pattern Evolution
- Event Driven Architecture
- Publish Subscribe Model
- Kafka Integration
- RabbitMQ Integration
- Spring Boot Example
- Banking Use Cases
- Enterprise Architecture
- Interview Questions
Introduction
In traditional applications:
One Object Changes
↓
Other Objects Get Notified
Example:
Stock Price Changed
↓
Update Dashboard
↓
Send Email
↓
Generate Alert
This is Observer Pattern.
Traditional Observer Pattern
Participants:
Subject
Observers
Traditional Architecture
flowchart LR
A[Subject]
B[Observer 1]
C[Observer 2]
D[Observer 3]
A --> B
A --> C
A --> D
Example
StockSubject
PriceDisplay
EmailAlert
MobileAlert
When stock changes:
All Observers Notified
Problem In Microservices
Microservices run:
Different Servers
Different Containers
Different Databases
Traditional Observer:
Direct Object References
are impossible.
Challenge
Question:
How does Order Service
notify
Inventory Service
Payment Service
Notification Service?
without tight coupling?
Solution
Observer Pattern evolves into:
Event Driven Architecture
Observer Pattern In Microservices
Subject becomes:
Event Producer
Observers become:
Event Consumers
Core Idea
Instead of:
Direct Method Calls
Use:
Events
Traditional Observer
flowchart LR
A[Subject]
B[Observer]
A --> B
Tightly coupled.
Microservice Observer
flowchart LR
A[Producer]
B[Event Broker]
C[Consumer A]
D[Consumer B]
E[Consumer C]
A --> B
B --> C
B --> D
B --> E
Loosely coupled.
Real World Analogy
Think about:
YouTube Channel
Channel uploads video.
Subscribers automatically receive notification.
Channel does NOT know:
Who Watches
Same concept.
Publish Subscribe Model
Publisher:
Produces Event
Subscribers:
Receive Event
Pub Sub Architecture
flowchart LR
A[Publisher]
B[Topic]
C[Subscriber 1]
D[Subscriber 2]
E[Subscriber 3]
A --> B
B --> C
B --> D
B --> E
Order Processing Example
Order Created.
Interested Services:
Inventory Service
Payment Service
Notification Service
Analytics Service
Event Flow
flowchart LR
A[Order Service]
B[OrderCreated Event]
C[Inventory Service]
D[Payment Service]
E[Notification Service]
A --> B
B --> C
B --> D
B --> E
Why This Is Observer Pattern
Order Service:
Subject
Other Services:
Observers
Event Broker:
Notification Mechanism
Event Driven Architecture
EDA is basically:
Distributed Observer Pattern
Event Driven Flow
flowchart LR
A[Producer]
B[Event]
C[Broker]
D[Consumers]
A --> B
B --> C
C --> D
Kafka As Observer Pattern
Kafka Topic:
Acts As Subject
Consumers:
Act As Observers
Kafka Architecture
flowchart LR
A[Order Service]
B[Kafka Topic]
C[Inventory Service]
D[Payment Service]
E[Notification Service]
A --> B
B --> C
B --> D
B --> E
Order Created Event
{
"event":"OrderCreated",
"orderId":"1001"
}
Event Consumers
Inventory Service:
Reserve Inventory
Payment Service:
Process Payment
Notification Service:
Send Email
RabbitMQ Example
Producer:
Order Service
Exchange:
Message Router
Consumers:
Inventory
Payment
Email
RabbitMQ Architecture
flowchart LR
A[Order Service]
B[RabbitMQ Exchange]
C[Inventory]
D[Payment]
E[Email]
A --> B
B --> C
B --> D
B --> E
Spring Boot Kafka Example
Producer:
kafkaTemplate.send(
"orders",
event
);
Consumer Example
@KafkaListener(
topics = "orders")
public void process(
OrderCreatedEvent event) {
System.out.println(
event);
}
Execution Flow
sequenceDiagram
OrderService->>Kafka: Publish Event
Kafka->>InventoryService: Notify
Kafka->>PaymentService: Notify
Kafka->>NotificationService: Notify
Banking Example
Fund Transfer Completed.
Interested Services:
Audit Service
Notification Service
Fraud Service
Analytics Service
Banking Observer Flow
flowchart LR
A[Transfer Service]
B[TransferCompleted Event]
C[Audit Service]
D[Fraud Service]
E[Notification Service]
A --> B
B --> C
B --> D
B --> E
Insurance Example
Claim Approved.
Observers:
Payment Service
Email Service
Audit Service
Insurance Flow
flowchart LR
A[Claim Service]
B[ClaimApproved Event]
C[Payment Service]
D[Email Service]
E[Audit Service]
A --> B
B --> C
B --> D
B --> E
E-Commerce Example
Order Placed.
Observers:
Inventory
Shipping
Recommendation Engine
Analytics
Retail Architecture
flowchart LR
A[Order Service]
B[Order Event]
C[Inventory]
D[Shipping]
E[Analytics]
A --> B
B --> C
B --> D
B --> E
Observer vs Event Driven
| Traditional Observer | Microservice Observer |
|---|---|
| In Memory | Distributed |
| Direct Reference | Event Broker |
| Synchronous | Asynchronous |
| Same JVM | Multiple Services |
Observer vs Pub Sub
| Observer | Publish Subscribe |
|---|---|
| Local Objects | Distributed Services |
| Direct Notification | Event Broker |
| Same Process | Different Processes |
Event Broker Options
Kafka
RabbitMQ
ActiveMQ
Amazon SNS
Google Pub/Sub
Azure Service Bus
Enterprise Use Cases
Banking
Transfers
Audit Events
Fraud Detection
Insurance
Claims
Policy Updates
Payments
Retail
Orders
Inventory
Shipping
Healthcare
Patient Events
Appointment Updates
Travel
Booking Events
Flight Notifications
Real Enterprise Architecture
flowchart LR
A[API Gateway]
B[Order Service]
C[Kafka]
D[Inventory Service]
E[Payment Service]
F[Notification Service]
G[Analytics Service]
A --> B
B --> C
C --> D
C --> E
C --> F
C --> G
Benefits
✅ Loose Coupling
✅ Scalability
✅ Asynchronous Communication
✅ Easy Feature Addition
✅ Event Driven Architecture
✅ Cloud Native Friendly
Limitations
❌ Eventual Consistency
❌ More Infrastructure
❌ Event Ordering Challenges
❌ Debugging Complexity
When To Use
Use when:
Event Driven Systems
Microservices
Kafka
RabbitMQ
Asynchronous Workflows
When NOT To Use
Avoid when:
Simple Monoliths
Direct Synchronous Calls
Small Applications
Interview Questions
How is Observer Pattern used in Microservices?
Through Event Driven Architecture.
What replaces Observer Notification?
Message Brokers.
Kafka Role?
Acts as event distribution mechanism.
Subject Equivalent?
Producer.
Observer Equivalent?
Consumer.
Main Benefit?
Loose coupling between services.
Biggest Challenge?
Eventual consistency.
Key Takeaways
- Observer Pattern evolves into Event Driven Architecture in Microservices.
- Producers publish events instead of calling services directly.
- Consumers subscribe to events.
- Kafka and RabbitMQ are common implementations.
- Enables scalable, loosely coupled architectures.
- Widely used in Banking, Insurance, Retail, Healthcare, and Travel systems.
- One of the most important patterns behind modern Event-Driven Microservices.