Work queues, pub-sub fan-out, dead letter queues, and async RPC — choose the right messaging pattern.
Async Messaging Patterns
# 1. Work Queue (point-to-point)
# One producer, one consumer per message
# Use for: emails, PDF generation, background tasks
# 2. Publish-Subscribe (fan-out)
# One publisher, many subscribers
order-service publishes OrderPlaced
--> inventory-svc subscribes (reserve stock)
--> notification-svc subscribes (send email)
--> analytics-svc subscribes (update metrics)
# 3. Dead Letter Queue (DLQ)
# Failed messages go to DLQ after max retries
# Alert on DLQ depth > 0
# Inspect and replay or discard
# 4. Request-Reply over queue (async RPC)
correlation_id = str(uuid.uuid4())
queue.send('tasks', {cmd:'process',cid:correlation_id})
reply = queue.wait('replies.' + correlation_id, timeout=30)