Bird
Raised Fist0
RabbitMQdevops~5 mins

Message acknowledgment in RabbitMQ - Commands & Configuration

Choose your learning style10 modes available
Introduction
Sometimes messages sent to a queue can get lost if the receiver crashes or fails. Message acknowledgment is a way for the receiver to tell the sender that it got the message and processed it. This helps make sure messages are not lost and are handled properly.
When you want to make sure a message is processed before removing it from the queue
When your application might crash or disconnect while processing messages
When you want to retry processing a message if the first attempt fails
When you need reliable communication between different parts of your system
When you want to avoid losing important data sent through RabbitMQ
Commands
This command shows the queues with how many messages are ready to be delivered and how many are unacknowledged (sent but not confirmed). It helps you see if messages are waiting or stuck.
Terminal
rabbitmqctl list_queues name messages_ready messages_unacknowledged
Expected OutputExpected
queue1 5 2 queue2 0 0
This command sends a message 'Hello World' to the queue named 'task_queue'. It simulates a producer sending work to be done.
Terminal
rabbitmqadmin publish routing_key=task_queue payload='Hello World' -u guest -p guest
Expected OutputExpected
{}
→
routing_key - Specifies the queue to send the message to
→
payload - The actual message content
→
-u - Username for authentication
→
-p - Password for authentication
This command fetches one message from 'task_queue' without requeuing it. It simulates a consumer receiving a message and acknowledging it immediately.
Terminal
rabbitmqadmin get queue=task_queue requeue=false -u guest -p guest
Expected OutputExpected
{"payload":"Hello World","message_count":0}
→
queue - Specifies which queue to get the message from
→
requeue - If false, message is acknowledged and removed from queue
Key Concept

If you remember nothing else from this pattern, remember: the consumer must acknowledge messages to tell RabbitMQ they were processed, or else messages stay unacknowledged and may be redelivered.

Common Mistakes
Not acknowledging messages after processing
Messages remain unacknowledged and RabbitMQ may resend them, causing duplicate processing or stuck messages.
Always send an acknowledgment after successfully processing each message.
Acknowledging messages before processing is complete
If the consumer crashes after acknowledging but before finishing, the message is lost without being processed.
Acknowledge only after the message is fully processed.
Using automatic acknowledgment without understanding consequences
Messages are removed immediately on delivery, risking loss if the consumer fails.
Use manual acknowledgments to control message reliability.
Summary
Use rabbitmqctl to check how many messages are ready and unacknowledged in queues.
Publish messages to queues with rabbitmqadmin to simulate sending work.
Get and acknowledge messages manually to ensure reliable processing and avoid message loss.

Practice

(1/5)
1. What is the main purpose of message acknowledgment in RabbitMQ?
easy
A. To confirm that a message was received and processed successfully
B. To delete the message queue permanently
C. To create a new message exchange
D. To encrypt messages before sending

Solution

  1. Step 1: Understand message acknowledgment role

    Message acknowledgment tells RabbitMQ that the consumer has processed the message successfully.
  2. Step 2: Identify the purpose from options

    Only To confirm that a message was received and processed successfully describes confirming message processing, which prevents message loss.
  3. Final Answer:

    To confirm that a message was received and processed successfully -> Option A
  4. Quick Check:

    Message acknowledgment = Confirm processing [OK]
Hint: Acknowledgment means confirming message processed [OK]
Common Mistakes:
  • Confusing acknowledgment with queue deletion
  • Thinking acknowledgment creates exchanges
  • Assuming acknowledgment encrypts messages
2. Which RabbitMQ client method is used to acknowledge a message after processing?
easy
A. basic_reject
B. basic_publish
C. basic_consume
D. basic_ack

Solution

  1. Step 1: Recall RabbitMQ acknowledgment method

    The method to acknowledge a message is basic_ack, which confirms message processing.
  2. Step 2: Match method to options

    Only basic_ack matches the acknowledgment method; others are for publishing, consuming, or rejecting.
  3. Final Answer:

    basic_ack -> Option D
  4. Quick Check:

    basic_ack = acknowledge message [OK]
Hint: Use basic_ack to confirm message processed [OK]
Common Mistakes:
  • Using basic_publish to acknowledge
  • Confusing basic_consume with acknowledgment
  • Mistaking basic_reject as acknowledgment
3. Given this Python snippet using pika:
channel.basic_consume(queue='task_queue', on_message_callback=callback, auto_ack=False)

def callback(ch, method, properties, body):
    print(f"Received {body}")
    ch.basic_ack(delivery_tag=method.delivery_tag)
What will happen if basic_ack is not called inside callback?
medium
A. Messages will be lost after delivery
B. Messages will be automatically acknowledged
C. Messages will be requeued and redelivered
D. The queue will be deleted

Solution

  1. Step 1: Understand auto_ack=False effect

    With auto_ack=False, messages must be manually acknowledged or they stay unacknowledged.
  2. Step 2: Consequence of missing basic_ack

    If basic_ack is not called, RabbitMQ will requeue the message and redeliver it to consumers.
  3. Final Answer:

    Messages will be requeued and redelivered -> Option C
  4. Quick Check:

    No ack + auto_ack=False = redelivery [OK]
Hint: No ack with auto_ack false causes redelivery [OK]
Common Mistakes:
  • Assuming messages are lost without ack
  • Thinking messages auto-acknowledge without basic_ack
  • Believing queue deletes on missing ack
4. You wrote this callback in Python with pika:
def callback(ch, method, properties, body):
    print(f"Processing {body}")
    ch.basic_ack(delivery_tag=method.delivery_tag + 1)
What is the problem with this acknowledgment call?
medium
A. The delivery tag is incorrect, causing ack failure
B. basic_ack does not accept delivery_tag parameter
C. The callback function is missing required parameters
D. basic_ack should be called before processing the message

Solution

  1. Step 1: Check delivery_tag usage

    The delivery tag must match the exact tag from method.delivery_tag to acknowledge the correct message.
  2. Step 2: Identify error in delivery_tag calculation

    Adding 1 to the delivery tag sends an invalid tag, so RabbitMQ will not acknowledge the message properly.
  3. Final Answer:

    The delivery tag is incorrect, causing ack failure -> Option A
  4. Quick Check:

    delivery_tag must match exactly [OK]
Hint: Use exact delivery_tag value for ack [OK]
Common Mistakes:
  • Modifying delivery_tag before ack
  • Thinking basic_ack lacks delivery_tag parameter
  • Calling ack before processing message
5. You want to ensure that if your consumer crashes before acknowledging, the message is redelivered. Which combination of settings and code achieves this safely?
hard
A. Set auto_ack=True and call basic_ack in callback
B. Set auto_ack=False and call basic_ack with correct delivery_tag after processing
C. Set auto_ack=False and never call basic_ack
D. Set auto_ack=True and never call basic_ack

Solution

  1. Step 1: Understand auto_ack impact on message safety

    Setting auto_ack=True acknowledges messages immediately, risking message loss if consumer crashes.
  2. Step 2: Use manual acknowledgment for safe processing

    Setting auto_ack=False and calling basic_ack after processing ensures messages are only removed after success.
  3. Step 3: Confirm correct delivery_tag usage

    Calling basic_ack with the exact delivery tag confirms the message was processed and prevents redelivery.
  4. Final Answer:

    Set auto_ack=False and call basic_ack with correct delivery_tag after processing -> Option B
  5. Quick Check:

    Manual ack + correct tag = safe redelivery [OK]
Hint: Use manual ack with correct tag for safe redelivery [OK]
Common Mistakes:
  • Using auto_ack=True for critical messages
  • Not calling basic_ack at all
  • Calling basic_ack with wrong delivery_tag
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard