Message Queue Fundamentals
Message Queue Fundamentals¶
Difficulty: βββ
Overview¶
Message queues are essential infrastructure enabling asynchronous communication between services in distributed systems. This chapter covers the differences between synchronous and asynchronous communication, queue vs topic concepts, message delivery guarantees, and idempotency.
Table of Contents¶
- Synchronous vs Asynchronous Communication
- Benefits of Message Queues
- Queue vs Topic
- Message Delivery Guarantees
- Idempotency
- Message Queue Patterns
- Practice Problems
1. Synchronous vs Asynchronous Communication¶
Synchronous Communication¶
Waiting for a response after making a request.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Synchronous (Request-Response) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ ββββββββββββ β
β β Service Aβ β Service Bβ β
β ββββββ¬ββββββ ββββββ¬ββββββ β
β β β β
β ββββββββ HTTP Request βββββββββββββββββΊβ β
β β β β
β β (Service A blocked) β Processing... β
β β Request thread waiting β β
β β β β
β ββββββββ HTTP Response ββββββββββββββββ β
β β β β
β βΌ βΌ β
β Continue next task Processing complete β
β β
β Characteristics: β
β - Immediate response required β
β - Caller waits for response β
β - Service A affected when Service B fails β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Asynchronous Communication¶
Send a message and immediately continue with other tasks.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Asynchronous (Message Queue) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ ββββββββββββββββ ββββββββββββ β
β β Service Aβ β Message Queueβ β Service Bβ β
β β(Producer)β β β β(Consumer)β β
β ββββββ¬ββββββ ββββββββ¬ββββββββ ββββββ¬ββββββ β
β β β β β
β βββββ Send Msg ββββΊβ β β
β βββββ ACK ββββββββββ β β
β β β β β
β βΌ β β β
β Continue next task βββββ Poll βββββββββ β
β (no blocking) βββββ Deliver βββββΊβ β
β β β Processing... β
β βββββ ACK ββββββββββ β
β β βΌ β
β β Processing complete β
β β
β Characteristics: β
β - Sender/receiver independent β
β - Loose coupling β
β - Service A operates normally even when Service B fails β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Communication Methods Comparison¶
| Characteristic | Synchronous | Asynchronous |
|---|---|---|
| Wait for response | Required | Not required |
| Coupling | Strong | Loose |
| Failure propagation | Immediate | Isolated |
| Real-time nature | Immediate | Can be delayed |
| Complexity | Low | High |
| Throughput | Limited | High |
2. Benefits of Message Queues¶
Decoupling¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Tight Coupling vs Loose Coupling β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Tight Coupling (synchronous): β
β βββββββ βββββββ βββββββ βββββββ β
β β A ββββββΊβ B ββββββΊβ C ββββββΊβ D β β
β βββββββ βββββββ βββββββ βββββββ β
β β X Failure! β
β βΌ β
β A also fails! (Wait for B β C fails β entire failure) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Loose Coupling (asynchronous): β
β βββββββββββββββ β
β β Message β β
β βββββββ β Queue β βββββββ β
β β A ββββpublishβββΊβββββββββββββββ€βββconsumeβββ B β β
β βββββββ β [msg][msg] β βββββββ β
β β β [msg][msg] β X Failure! β
β βΌ βββββββββββββββ β
β A continues! β
β (Messages stored in queue, processed after B recovers) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Load Leveling¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Load Leveling β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Without Queue (direct call): β
β β
β Request β ββββ β
β volume β ββββ β Server overload at peak! β
β Processing β ββββββββββββββββββββ β
β capacity β ββββ β
β ββββββββββββββββββββββββββΊ Time β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β With Queue (buffering): β
β β
β Request β ββββ β
β volume β ββββ β
β Queue β βββββββββββββββββ β
β size β ββββββββββββ β
β Processing β βββββββββββββββββββββββ β Steady processing β
β ββββββββββββββββββββββββββΊ Time β
β β
β Queue acts as buffer: β
β - Absorb peak traffic β
β - Consumer processes at steady rate β
β - Improved system stability β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Scalability¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Horizontal Scaling β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββ β
β β Message β β
β β Queue β β
β ββββββββββββββ€ β
β ProducerββββΊβ [m1][m2] β β
β β [m3][m4] β β
β β [m5][m6] β β
β βββββββ¬βββββββ β
β β β
β ββββββββββββΌβββββββββββ β
β βΌ βΌ βΌ β
β βββββββββββ βββββββββββ βββββββββββ β
β βConsumer1β βConsumer2β βConsumer3β β
β β (m1) β β (m2) β β (m3) β β
β βββββββββββ βββββββββββ βββββββββββ β
β β
β To increase throughput: β
β - Just add more consumers β
β - No producer code changes needed β
β - Messages automatically distributed to consumers β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Durability¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Message Persistence β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ ββββββββββββββββββββββββββββ β
β β Producer ββββββΊβ Message Queue (Durable) β β
β ββββββββββββ ββββββββββββββββββββββββββββ€ β
β β Memory β β
β β ββββββββββββββββββββ β β
β β β [msg1] [msg2] β β β
β β ββββββββββ¬ββββββββββ β β
β β β β β
β β βΌ β β
β β Disk (WAL) β β
β β ββββββββββββββββββββ β β
β β β msg1, msg2, ... β β β
β β ββββββββββββββββββββ β β
β ββββββββββββββββββββββββββββ β
β β
β Failure recovery: β
β 1. Broker restarts β
β 2. Restore messages from disk β
β 3. Resend to consumers β
β β Prevent message loss β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3. Queue vs Topic¶
Point-to-Point (Queue)¶
One message is processed by only one consumer.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Point-to-Point (Queue) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββ β
β ββββββββββββ β Queue β β
β βProducer 1βββββββββββΊβ βββββ¬ββββ¬ββββ¬ββββ β β
β ββββββββββββ β β A β B β C β D β β β
β β βββββ΄ββββ΄ββββ΄ββββ β β
β ββββββββββββ β β ββββββββββββ β
β βProducer 2βββββββββββΊβ Each message βββββββββββΊβConsumer 1β β
β ββββββββββββ β processed by only β A,C ββββββββββββ β
β β one consumer β β
β β β ββββββββββββ β
β β βββββββββββΊβConsumer 2β β
β β β B,D ββββββββββββ β
β βββββββββββββββββββββ β
β β
β Use cases: β
β - Work distribution (Work Queue) β
β - Order processing β
β - Email sending queue β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Publish/Subscribe (Topic)¶
One message is delivered to all subscribers.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Publish/Subscribe (Topic) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββ β
β ββββββββββββ β Topic β ββββββββββββββ β
β βPublisher βββββββββββΊβ βββββ¬ββββ¬ββββ¬ββββ ββββββββββΊβSubscriber 1β β
β ββββββββββββ β β A β B β C β D β β A,B, β (all msgs) β β
β β βββββ΄ββββ΄ββββ΄ββββ β C,D ββββββββββββββ β
β β β β
β β All subscribers β ββββββββββββββ β
β β receive all ββββββββββΊβSubscriber 2β β
β β messages β A,B, β (all msgs) β β
β β β C,D ββββββββββββββ β
β β β β
β β β ββββββββββββββ β
β β ββββββββββΊβSubscriber 3β β
β β β A,B, β (all msgs) β β
β βββββββββββββββββββββ C,D ββββββββββββββ β
β β
β Use cases: β
β - Event broadcast β
β - Log collection (multiple systems receive same logs) β
β - Price updates (propagate to all clients) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Consumer Group (Hybrid)¶
Kafka style: Topic + distributed processing within group
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Consumer Group β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββ β
β β Topic β β
β ββββββββββββ β βββββ¬ββββ¬ββββ¬ββββ β β
β βPublisher βββββββββββΊβ β A β B β C β D β β β
β ββββββββββββ β βββββ΄ββββ΄ββββ΄ββββ β β
β βββββββββββ¬ββββββββββ β
β β β
β βββββββββββββββββββββΌββββββββββββββββββββ β
β βΌ βΌ βΌ β
β βββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββ β
β β Consumer Group 1 β β Consumer Group 2 β β Consumer Group 3 β β
β β (Order Service) β β (Analytics) β β (Notification) β β
β βββββββββββββββββββββ€ βββββββββββββββββββββ€ βββββββββββββββββββββ€ β
β β ββββββ ββββββ β β ββββββ ββββββ β β ββββββ β β
β β βC1-1β βC1-2β β β βC2-1β βC2-2β β β βC3-1β β β
β β βA,C β βB,D β β β βA,C β βB,D β β β βA,B,C,Dβ β β
β β ββββββ ββββββ β β ββββββ ββββββ β β ββββββ β β
β βββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββ β
β β
β Behavior: β
β - Each group receives all messages (Pub/Sub) β
β - Within group, messages are distributed (Point-to-Point) β
β - Scaling: Add consumers within group β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Pattern Comparison¶
| Characteristic | Queue (P2P) | Topic (Pub/Sub) | Consumer Group |
|---|---|---|---|
| Message copies | 1:1 | 1:N | 1 per group |
| Load balancing | O | X | O within group |
| Broadcast | X | O | O between groups |
| Scalability | Add consumers | Limited | Flexible |
4. Message Delivery Guarantees¶
At-Most-Once¶
Messages may be lost, but no duplicates.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β At-Most-Once β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ βββββββββββ ββββββββββββ β
β β Producer β β Queue β β Consumer β β
β ββββββ¬ββββββ ββββββ¬βββββ ββββββ¬ββββββ β
β β β β β
β βββ Send(msg) βββΊβ β β
β β βββ Deliver ββββΊβ β
β β β X Failure before processing! β
β β β β β
β β β (delete msg) β β
β β β β β
β β β No resend β β
β β β β β
β β
β Implementation: Delete message before ACK β
β β
β Advantages: β
β - No duplicate processing needed β
β - Fastest performance β
β β
β Disadvantages: β
β - Possible message loss β
β β
β Use cases: β
β - Real-time sensor data (some loss acceptable) β
β - Log collection (performance over completeness) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
At-Least-Once¶
Messages may be duplicated, but no loss.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β At-Least-Once β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ βββββββββββ ββββββββββββ β
β β Producer β β Queue β β Consumer β β
β ββββββ¬ββββββ ββββββ¬βββββ ββββββ¬ββββββ β
β β β β β
β βββ Send(msg) βββΊβ β β
β β βββ Deliver ββββΊβ β
β β β β Processing complete β
β β β X Failure before ACK! β
β β β β β
β β β (no ACK recv) β β
β β β β β
β β βββ Redeliver ββΊβ β Resend (duplicate!) β
β β ββββ ACK ββββββββ β
β β β β β
β β
β Implementation: Delete message only after ACK β
β β
β Advantages: β
β - No message loss β
β β
β Disadvantages: β
β - Need duplicate processing (requires idempotency) β
β β
β Use cases: β
β - Payment processing (no loss allowed, implement idempotency) β
β - Order processing β
β - Email sending β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Exactly-Once¶
Theoretically most ideal, but complex to implement.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Exactly-Once β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Pure Exactly-Once is impossible in distributed systems! β
β (Two Generals Problem) β
β β
β Practical implementation: "Effectively Once" β
β β
β Method 1: At-Least-Once + Idempotent Consumer β
β ββββββββββββ βββββββββββ ββββββββββββββββββββ β
β β Producer ββββββΊβ Queue ββββββΊβ Idempotent β β
β ββββββββββββ βββββββββββ β Consumer β β
β β ββββββββββββββββ β β
β β βProcessed IDs β β β
β β β{id1, id2, ..}β β β
β β ββββββββββββββββ β β
β β Ignore already β β
β β processed β β
β ββββββββββββββββββββ β
β β
β Method 2: Transaction-based (Kafka Transactions) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Transaction β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β Read from ββββ Process ββββ Write to β β β
β β β input topic β β β β output topicβ β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β β
β β β All succeed or all fail β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Use cases: β
β - Financial transactions β
β - Inventory management β
β - Stream processing (Kafka Streams) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Delivery Guarantee Comparison¶
| Guarantee Level | Loss | Duplicate | Performance | Complexity |
|---|---|---|---|---|
| At-Most-Once | Possible | None | Highest | Low |
| At-Least-Once | None | Possible | Good | Medium |
| Exactly-Once | None | None | Low | High |
5. Idempotency¶
What is Idempotency?¶
The property that performing the same operation multiple times produces the same result.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Idempotency β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Idempotent operation: β
β f(f(x)) = f(x) β
β β
β Examples: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Operation β Idempotent? β Description β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β x = 5 β O β x=5 no matter how many β β
β β DELETE /users/123 β O β Deleting already deletedβ β
β β PUT /users/123 {name:A} β O β Overwrite with same val β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β x = x + 1 β X β Increases each time β β
β β POST /orders β X β Creates new order each β β
β β account.balance -= 100 β X β Deducts each time β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Idempotency Implementation Patterns¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Idempotency Implementation Methods β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Method 1: Idempotency Key β
β β
β ββββββββββββ ββββββββββββββββββββββββββ β
β β Client β β Server β β
β ββββββ¬ββββββ β ββββββββββββββββββββ β β
β β β β Processed Keys β β β
β βββPOST /payment β β {key1, key2, ...}β β β
β β Idempotency-Key: abc123 β ββββββββββββββββββββ β β
β β {amount: 100} β β β
β β β 1. Check: abc123? β β
β β β 2. Not found β processβ β
β β β 3. Store abc123 β β
β βββ 200 OK ββββββββββββββββββββββ β β
β β β β β
β βββPOST /payment (retry) β β β
β β Idempotency-Key: abc123 β β β
β β {amount: 100} β β β
β β β 1. Check: abc123? β β
β β β 2. Found β return old β β
β βββ 200 OK (same response) ββββββ β β
β β β β β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Method 2: Version/Conditional Update β
β β
β -- Non-idempotent UPDATE β
β UPDATE accounts SET balance = balance - 100 WHERE id = 1; β
β -- Deducts 100 each execution β
β β
β -- Idempotent UPDATE (using version) β
β UPDATE accounts β
β SET balance = balance - 100, version = 2 β
β WHERE id = 1 AND version = 1; β
β -- Only executes when version = 1 (succeeds only once) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Method 3: Absolute Value Setting β
β β
β -- Non-idempotent β
β INSERT INTO orders (user_id, amount) VALUES (1, 100); β
β β
β -- Idempotent (UPSERT) β
β INSERT INTO orders (order_id, user_id, amount) β
β VALUES ('order-abc123', 1, 100) β
β ON CONFLICT (order_id) DO NOTHING; β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Idempotent Consumer Implementation Example¶
class IdempotentConsumer:
def __init__(self, redis_client, db):
self.redis = redis_client
self.db = db
def process_message(self, message):
message_id = message['id']
# 1. Check if already processed
if self.is_processed(message_id):
print(f"Message {message_id} already processed, skipping")
return
# 2. Process business logic
try:
self.handle_business_logic(message)
# 3. Mark as processed (atomically)
self.mark_processed(message_id)
except Exception as e:
# Can retry on processing failure
raise
def is_processed(self, message_id):
# Use Redis SET (manage memory with TTL)
return self.redis.sismember("processed_messages", message_id)
def mark_processed(self, message_id):
# Auto-delete after 24 hours
self.redis.sadd("processed_messages", message_id)
self.redis.expire("processed_messages", 86400)
def handle_business_logic(self, message):
# Actual business logic
if message['type'] == 'payment':
self.process_payment(message['data'])
6. Message Queue Patterns¶
Work Queue (Task Queue)¶
Distribute tasks to multiple workers.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Work Queue Pattern β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββ β
β β Work Queue β β
β ββββββββββββ β βββββ¬ββββ¬ββββ β ββββββββββββ β
β β Producer βββββββββΊβ βT1 βT2 βT3 β ββββββββββΊβ Worker 1 β β
β β (Web) β β βββββΌββββΌββββ€ β ββββββββββββ β
β ββββββββββββ β βT4 βT5 βT6 β β β
β β βββββ΄ββββ΄ββββ β ββββββββββββ β
β ββββββββββββββββββββββββββββΊβ Worker 2 β β
β ββββββββββββ β
β Use cases: ββββββββββββ β
β - Image resizing ββββββΊβ Worker 3 β β
β - PDF generation ββββββββββββ β
β - Email sending β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Request-Reply¶
Asynchronous request-response pattern.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Request-Reply Pattern β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ βββββββββββββββ ββββββββββββ β
β β Requesterβ βRequest Queueβ β Replier β β
β β β βββββββββββββββ β β β
β β β βββββββββββββββ β β β
β β β βReply Queue β β β β
β ββββββ¬ββββββ ββββββββ¬βββββββ ββββββ¬ββββββ β
β β β β β
β ββRequest(replyTo:Q1,correlationId:C1)ββΊβ β
β β β β β
β β β β Processing β
β β β β β
β ββββReply(correlationId:C1)βββββββββββ β
β β β β β
β β
β Message structure: β
β Request: { β
β correlationId: "req-123", β
β replyTo: "reply-queue-A", β
β body: { ... } β
β } β
β β
β Reply: { β
β correlationId: "req-123", // Match request and reply β
β body: { ... } β
β } β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Dead Letter Queue (DLQ)¶
Store failed messages.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Dead Letter Queue β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββ β
β ββββββββββββ β Main Queue β ββββββββββββ β
β β Producer βββββββββΊβ βββββ¬ββββ¬ββββ ββββββββββΊβ Consumer β β
β ββββββββββββ β β A β B β C β β ββββββ¬ββββββ β
β β βββββ΄ββββ΄ββββ β β β
β ββββββββββ¬βββββββββ β β
β β β β
β β Processing failed β β
β β (retry exceeded) β β
β βΌ βΌ β
β βββββββββββββββββββ Failed! (msg B) β
β β Dead Letter Q β β β
β β βββββ ββββββββββββββββ β
β β β B β β β
β β βββββ β β
β ββββββββββ¬βββββββββ β
β β β
β βΌ β
β Manual review / reprocess β
β β
β DLQ usage: β
β - Analyze failure cause β
β - Manual reprocessing β
β - Alerting/monitoring β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Priority Queue¶
Process messages according to priority.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Priority Queue β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ βββββββββββββββββββββββ ββββββββββββ β
β β Producer β β Priority Queue β β Consumer β β
β ββββββ¬ββββββ β β ββββββ¬ββββββ β
β β β High βββββ¬ββββ β β β
β βββ(P:High)ββββββββββΊβ A β D β ββββββββββββ β
β β β βββββ΄ββββ β β β
β βββ(P:Med)βββ Medium βββββ¬ββββ β β β
β β βββββββββΊβ B β β β β β
β β β βββββ΄ββββ β β β
β βββ(P:Low)βββ Low βββββ¬ββββ β β β
β β βββββββββΊβ C β E β β β β
β β β βββββ΄ββββ β β β
β β βββββββββββββββββββββββ β β
β β β β
β β Processing order: A β D β B β C β E β β
β β
β Implementation methods: β
β 1. Separate queues per priority + weighted polling β
β 2. Single queue + heap sort β
β 3. RabbitMQ: x-max-priority setting β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
7. Practice Problems¶
Exercise 1: Choose Communication Method¶
Select appropriate synchronous/asynchronous method for the following scenarios:
- User login authentication
- Send confirmation email after order
- Payment approval request
- Log collection
- Real-time chat message
Exercise 2: Choose Delivery Guarantee¶
Select appropriate delivery guarantee level for the following use cases:
- IoT sensor temperature data
- Bank transfer request
- News feed update
- Order creation event
- Game player position update
Exercise 3: Design Idempotency¶
Design how to make the following operations idempotent:
- Withdraw 100 from account
- Decrease product inventory by 1
- Send email
- Add points
Next Steps¶
In 12_Message_System_Comparison.md, let's compare major message systems like Kafka, RabbitMQ, AWS SQS/SNS!
References¶
- "Enterprise Integration Patterns" - Gregor Hohpe, Bobby Woolf
- RabbitMQ Official Documentation
- Apache Kafka Documentation
- AWS Messaging Services
- "Designing Data-Intensive Applications" - Martin Kleppmann