Tasks wait in line
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.
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.
System Design Patterns