0
0
RabbitmqHow-ToBeginner ยท 3 min read

How to Use basic_publish in RabbitMQ: Syntax and Example

Use basic_publish in RabbitMQ to send a message to an exchange with a routing key. It requires specifying the exchange name, routing key, message body, and optional properties. This method delivers the message to queues bound to the exchange matching the routing key.
๐Ÿ“

Syntax

The basic_publish method sends a message to an exchange with a routing key. It has these main parts:

  • exchange: The name of the exchange to send the message to.
  • routing_key: The routing key used by the exchange to route the message to queues.
  • body: The message content as bytes.
  • properties: Optional message properties like headers or delivery mode.
python
channel.basic_publish(exchange='exchange_name', routing_key='routing_key', body=b'Message body', properties=None)
๐Ÿ’ป

Example

This example shows how to connect to RabbitMQ, declare a direct exchange, and send a message using basic_publish. It demonstrates sending a simple text message to the exchange with a routing key.

python
import pika

# Connect to RabbitMQ server
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

# Declare a direct exchange named 'logs'
channel.exchange_declare(exchange='logs', exchange_type='direct')

# Publish a message to the 'logs' exchange with routing key 'info'
channel.basic_publish(exchange='logs', routing_key='info', body=b'Hello RabbitMQ!')

print("Message sent")

# Close connection
connection.close()
Output
Message sent
โš ๏ธ

Common Pitfalls

Common mistakes when using basic_publish include:

  • Not declaring the exchange before publishing, causing message loss.
  • Using the wrong routing key that does not match any queue bindings.
  • Sending the message body as a string instead of bytes.
  • Not handling connection or channel errors, which can silently fail.

Always declare exchanges and queues properly and ensure routing keys match bindings.

python
## Wrong: Not declaring exchange
channel.basic_publish(exchange='missing_exchange', routing_key='info', body=b'Message')

## Right: Declare exchange first
channel.exchange_declare(exchange='missing_exchange', exchange_type='direct')
channel.basic_publish(exchange='missing_exchange', routing_key='info', body=b'Message')
๐Ÿ“Š

Quick Reference

Remember these tips when using basic_publish:

  • Always declare the exchange before publishing.
  • Use bytes for the message body.
  • Match routing keys with queue bindings.
  • Handle connection and channel errors gracefully.
โœ…

Key Takeaways

basic_publish sends messages to an exchange with a routing key in RabbitMQ.
Declare exchanges before publishing to avoid message loss.
Message body must be bytes, not string.
Routing keys must match queue bindings to deliver messages.
Handle connection and channel errors to ensure message delivery.