0
0
RabbitmqHow-ToBeginner ยท 4 min read

How to Implement Pub Sub in RabbitMQ: Simple Guide

To implement pub-sub in RabbitMQ, create a fanout exchange and bind multiple queues to it. Publishers send messages to the exchange, and all bound queues receive copies of the messages, enabling multiple subscribers to get the same data.
๐Ÿ“

Syntax

In RabbitMQ pub-sub, you use a fanout exchange to broadcast messages to all queues bound to it. The main parts are:

  • Exchange: A fanout type that routes messages to all bound queues.
  • Queues: Multiple queues bind to the exchange to receive messages.
  • Publisher: Sends messages to the exchange.
  • Subscribers: Consume messages from their queues.
python
channel.exchange_declare(exchange='logs', exchange_type='fanout')
queue_name = channel.queue_declare(queue='', exclusive=True).method.queue  # creates a random queue
channel.queue_bind(exchange='logs', queue=queue_name)
channel.basic_publish(exchange='logs', routing_key='', body='message')
๐Ÿ’ป

Example

This example shows a publisher sending messages to a fanout exchange named logs. Two subscribers create their own queues and bind them to the exchange to receive all messages.

python
import pika
import sys

# Setup connection and channel
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

# Declare fanout exchange
channel.exchange_declare(exchange='logs', exchange_type='fanout')

# Publisher sends message
message = ' '.join(sys.argv[1:]) or 'info: Hello World!'
channel.basic_publish(exchange='logs', routing_key='', body=message)
print(f"[x] Sent {message}")

connection.close()
Output
[x] Sent info: Hello World!
โš ๏ธ

Common Pitfalls

Common mistakes when implementing pub-sub in RabbitMQ include:

  • Not using a fanout exchange, which prevents broadcasting to all queues.
  • Using the same queue name for multiple subscribers, causing message sharing instead of duplication.
  • Not binding queues to the exchange, so subscribers receive no messages.
  • Forgetting to consume messages from the queues, leaving messages unprocessed.

Always create unique queues per subscriber and bind them to the fanout exchange.

python
## Wrong: Using direct exchange instead of fanout
channel.exchange_declare(exchange='logs', exchange_type='direct')

## Right: Use fanout exchange
channel.exchange_declare(exchange='logs', exchange_type='fanout')
๐Ÿ“Š

Quick Reference

Summary tips for RabbitMQ pub-sub:

  • Use fanout exchange to broadcast messages.
  • Create a unique queue for each subscriber.
  • Bind each queue to the fanout exchange.
  • Publish messages to the exchange, not directly to queues.
  • Subscribers consume messages from their own queues.
โœ…

Key Takeaways

Use a fanout exchange to broadcast messages to all bound queues in RabbitMQ pub-sub.
Each subscriber must have a unique queue bound to the fanout exchange to receive all messages.
Publishers send messages to the exchange, not directly to queues.
Always bind queues to the exchange to ensure message delivery.
Avoid using the same queue for multiple subscribers to prevent message sharing.