0
0
RabbitmqHow-ToBeginner ยท 4 min read

How to Use basic_consume in RabbitMQ: Simple Guide

Use basic_consume in RabbitMQ to start receiving messages from a queue by providing the queue name and a callback function that processes each message. It listens continuously and calls your callback whenever a new message arrives.
๐Ÿ“

Syntax

The basic_consume method requires a queue name and a callback function to handle messages. You can also set options like auto_ack to automatically acknowledge messages.

  • queue: The name of the queue to consume from.
  • on_message_callback: Function called when a message arrives.
  • auto_ack: If true, messages are acknowledged automatically.
python
channel.basic_consume(queue='queue_name', on_message_callback=callback_function, auto_ack=False)
๐Ÿ’ป

Example

This example shows how to connect to RabbitMQ, declare a queue, and consume messages using basic_consume. The callback prints the message body and manually acknowledges it.

python
import pika

def callback(ch, method, properties, body):
    print(f"Received message: {body.decode()}")
    ch.basic_ack(delivery_tag=method.delivery_tag)

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='test_queue')

channel.basic_consume(queue='test_queue', on_message_callback=callback, auto_ack=False)
print('Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
Output
Waiting for messages. To exit press CTRL+C Received message: Hello RabbitMQ!
โš ๏ธ

Common Pitfalls

Common mistakes when using basic_consume include:

  • Not acknowledging messages when auto_ack=False, causing messages to be re-delivered.
  • Using auto_ack=True without processing the message properly, risking message loss.
  • Not calling start_consuming(), so the consumer never starts listening.
python
import pika

def wrong_callback(ch, method, properties, body):
    print(f"Received: {body.decode()}")
    # Missing acknowledgment here

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='test_queue')

# Wrong: auto_ack=False but no ack in callback
channel.basic_consume(queue='test_queue', on_message_callback=wrong_callback, auto_ack=False)
channel.start_consuming()
๐Ÿ“Š

Quick Reference

Remember these tips when using basic_consume:

  • Always provide a callback function to process messages.
  • Set auto_ack=False for manual control and call basic_ack after processing.
  • Call start_consuming() to begin listening for messages.
  • Handle exceptions inside the callback to avoid consumer crashes.
โœ…

Key Takeaways

Use basic_consume with a callback to receive messages from a RabbitMQ queue.
Set auto_ack=False and call basic_ack in the callback to avoid message loss or duplication.
Always call start_consuming() to start the message listener loop.
Handle errors inside the callback to keep the consumer running smoothly.
Declare the queue before consuming to ensure it exists.