RabbitMQ Tutotial for Python (using Pika)
What is RabbitMQ?
RabbitMQ is an open-source message broker software that originally implemented the Advanced Message Queuing Protocol (AMQP). It facilitates the efficient delivery of messages in a distributed system, enabling applications to communicate with each other through message passing.
RabbitMQ is used for its reliability, scalability, and flexibility. It's particularly useful in decoupling systems or components, allowing for asynchronous processing, which can improve the scalability and efficiency of applications.
Use Cases:
- Asynchronous Task Processing: Offloading tasks that can be performed later, like sending emails or processing images.
- Inter-Service Communication: Enabling microservices to communicate in a decoupled manner.
- Distributed Computing: Coordinating and distributing workloads across various computing nodes.
Tutorials
We'll show how to create a producer (a.k.a. sender) for sending messages to a RabbitMQ queue as well as a consumer (a.k.a. listener or receiver) for receiving messages from the queue.
Prerequisites
- Python environment
- RabbitMQ server (Install guide: RabbitMQ Installation)
- pika library (Install using
pip install pika
)
Creating a Producer (a.k.a. Sender)
Step 1: Import Pika Library
import pika
Step 2: Establish Connection
Connect to a RabbitMQ server:
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
Step 3: Declare a Queue
Declare a queue to send messages:
channel.queue_declare(queue='hello')
Step 4: Send a Message
Publish a message to the queue:
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
Creating a Consumer (a.k.a. Listener/Receiver)
Step 1: Import Pika and Set Up Connection
Similar to the producer, import pika and set up the connection:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
Step 2: Declare the Same Queue
Make sure to declare the same queue as the producer:
channel.queue_declare(queue='hello')
Step 3: Define a Callback Function
Define the function to be called when a message is received:
def callback(ch, method, properties, body):
print(f" [x] Received {body}")
Step 4: Set Up Queue Consumption
Tell RabbitMQ that this callback function should receive messages from the queue:
channel.basic_consume(queue='hello',
on_message_callback=callback,
auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
Conclusion
With RabbitMQ and Python, you can set up robust and scalable message-based communication for your applications. This guide provides the basic steps to create a producer and consumer in Python, enabling you to implement efficient message handling in your system.