This document discusses using Python Celery and RabbitMQ to create a distributed message queue. It describes common problems that message queues can help with like long-running tasks and tasks that depend on third parties. It provides an overview of message brokers, exchanges, bindings and queues. It then demonstrates setting up Celery with RabbitMQ and running simple tasks asynchronously and monitoring their progress.