Message Queue

Tasks wait in line

Producer
Queue
Worker
Emails • Payments • Video processing
Tools: RabbitMQ • AWS SQS
When to Use:
Tasks that don't need instant response
"Implement message queue with RabbitMQ for async tasks"

What is Message Queue?

A Message Queue lets services communicate asynchronously—Service A puts a message in the queue, Service B processes it later. User uploads video → queue "encode video" job → worker processes it in background → notify user when done. Decouples services, handles traffic spikes, enables retries. Like a todo list for your backend. Common tools: RabbitMQ, Redis Queue, AWS SQS, Kafka for high-volume streams.

When Should You Use This?

Use message queues for slow operations that don't need immediate results (send email, process video, generate report), when you want to decouple services (payment service shouldn't wait for email service), or when handling traffic spikes (queue absorbs burst, workers process at steady rate). Don't use for real-time user-facing requests—those need synchronous APIs.

Common Mistakes to Avoid

  • No dead letter queue—failed jobs disappear, no way to debug or retry
  • Processing non-idempotent jobs—job runs twice, charge customer twice
  • No monitoring—queue fills up, no one notices until system breaks
  • Wrong queue size—too small = jobs dropped, too large = memory issues
  • Synchronous when async needed—"just send the email now" blocks request for 2 seconds

Real-World Examples

  • Stripe—Queues webhook deliveries, retries failed deliveries with backoff
  • GitHub—Queues repository analysis jobs, processes in background
  • Shopify—Queues order confirmation emails, handles Black Friday spikes
  • Video platforms—Queue encoding jobs, workers process videos in parallel

Category

System Design Patterns

Tags

message-queueasyncbackground-jobsrabbitmqsystem-design

Permalink