Bird
Raised Fist0
RabbitMQdevops~20 mins

Consumer acknowledgment strategies in RabbitMQ - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
RabbitMQ Consumer Acknowledgment Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Understanding manual acknowledgment in RabbitMQ

In RabbitMQ, what happens when a consumer uses manual acknowledgments but fails to send an acknowledgment for a received message?

AThe message is automatically acknowledged after a timeout period.
BThe message is duplicated and sent to all other consumers immediately.
CThe message remains unacknowledged and will be requeued when the consumer disconnects.
DThe message is lost and removed from the queue permanently.
Attempts:
2 left
💡 Hint

Think about what RabbitMQ does to ensure messages are not lost if a consumer crashes.

💻 Command Output
intermediate
2:00remaining
Output of RabbitMQ consumer with auto-ack enabled

What is the output behavior when a RabbitMQ consumer is started with autoAck=true and the consumer crashes before processing the message?

RabbitMQ
channel.basicConsume(queueName, true, consumer);
AThe message is duplicated and sent to all consumers.
BThe message is requeued and delivered to another consumer.
CThe message is held until the consumer recovers and processes it.
DThe message is lost because it was auto-acknowledged immediately.
Attempts:
2 left
💡 Hint

Auto-ack means the message is acknowledged as soon as it is delivered.

🔀 Workflow
advanced
3:00remaining
Correct sequence for manual acknowledgment in RabbitMQ consumer

Arrange the steps in the correct order for a RabbitMQ consumer using manual acknowledgments to process a message safely.

A1,4,2,3
B1,2,3,4
C2,1,3,4
D1,3,2,4
Attempts:
2 left
💡 Hint

Acknowledge only after successful processing.

❓ Troubleshoot
advanced
2:30remaining
Identifying cause of message duplication in RabbitMQ

A RabbitMQ consumer using manual acknowledgments notices duplicate messages being processed. Which of the following is the most likely cause?

AThe consumer is not acknowledging messages, causing RabbitMQ to requeue them after disconnect.
BThe consumer is acknowledging messages before processing them.
CThe queue is configured with <code>autoDelete=true</code>.
DThe consumer is using <code>autoAck=true</code>.
Attempts:
2 left
💡 Hint

Think about what happens if messages are not acknowledged.

✅ Best Practice
expert
3:00remaining
Best practice for ensuring message processing reliability in RabbitMQ

Which consumer acknowledgment strategy best ensures that messages are processed exactly once, even if the consumer crashes during processing?

AUse manual acknowledgments and acknowledge messages only after successful processing.
BUse <code>autoAck=true</code> to acknowledge messages immediately upon receipt.
CUse manual acknowledgments but acknowledge messages before processing starts.
DDisable acknowledgments and rely on queue durability.
Attempts:
2 left
💡 Hint

Consider when to send acknowledgment to avoid message loss or duplication.

Practice

(1/5)
1. What does setting autoAck=false in a RabbitMQ consumer do?
easy
A. It pauses message delivery until the consumer is ready.
B. It automatically acknowledges messages as soon as they are received.
C. It rejects messages immediately without processing.
D. It requires the consumer to manually acknowledge messages after processing.

Solution

  1. Step 1: Understand autoAck parameter

    The autoAck flag controls if messages are acknowledged automatically or manually.
  2. Step 2: Effect of setting autoAck to false

    When autoAck=false, the consumer must explicitly send an acknowledgment after processing each message.
  3. Final Answer:

    It requires the consumer to manually acknowledge messages after processing. -> Option D
  4. Quick Check:

    autoAck=false means manual ack [OK]
Hint: autoAck=false means manual message acknowledgment [OK]
Common Mistakes:
  • Thinking autoAck=false auto-acknowledges messages
  • Confusing autoAck with message rejection
  • Assuming autoAck pauses message delivery
2. Which of the following is the correct way to send a manual acknowledgment in RabbitMQ using the client library?
easy
A. channel.acknowledge(deliveryTag);
B. channel.basicAck(deliveryTag, false);
C. channel.sendAck(deliveryTag, true);
D. channel.confirm(deliveryTag);

Solution

  1. Step 1: Identify the correct method name

    The RabbitMQ client uses basicAck to acknowledge messages manually.
  2. Step 2: Understand parameters of basicAck

    The first parameter is the deliveryTag identifying the message; the second is multiple flag, usually false for single ack.
  3. Final Answer:

    channel.basicAck(deliveryTag, false); -> Option B
  4. Quick Check:

    Manual ack uses basicAck method [OK]
Hint: Manual ack uses basicAck(deliveryTag, false) [OK]
Common Mistakes:
  • Using non-existent methods like acknowledge or sendAck
  • Confusing confirm with ack
  • Passing wrong parameters to basicAck
3. Given the following code snippet, what will happen if the consumer crashes before calling channel.basicAck(deliveryTag, false);?
channel.basicConsume(queueName, false, consumerTag, new DefaultConsumer(channel) {
  public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) {
    // process message
    // no ack sent yet
  }
});
medium
A. The message will be requeued and delivered again to another consumer.
B. The message will be lost and never delivered again.
C. The message will be acknowledged automatically despite no ack call.
D. The consumer will block and wait indefinitely.

Solution

  1. Step 1: Understand manual ack behavior on consumer crash

    If a consumer crashes before sending basicAck, RabbitMQ considers the message unacknowledged.
  2. Step 2: RabbitMQ requeues unacknowledged messages

    Unacknowledged messages are requeued and delivered to other consumers to avoid message loss.
  3. Final Answer:

    The message will be requeued and delivered again to another consumer. -> Option A
  4. Quick Check:

    Unacked message + crash = requeue [OK]
Hint: Unacked messages get requeued on consumer crash [OK]
Common Mistakes:
  • Assuming message is lost without ack
  • Thinking message auto-acks on crash
  • Believing consumer blocks indefinitely
4. You have a consumer with autoAck=false but forgot to call basicAck after processing messages. What problem will this cause?
medium
A. Messages will pile up as unacknowledged and may block new deliveries.
B. Messages will be acknowledged automatically anyway.
C. RabbitMQ will delete the queue automatically.
D. The consumer will crash immediately.

Solution

  1. Step 1: Effect of missing manual acknowledgments

    Without calling basicAck, messages remain unacknowledged in RabbitMQ.
  2. Step 2: Consequence of unacknowledged messages

    Unacknowledged messages accumulate and can block further message delivery due to prefetch limits.
  3. Final Answer:

    Messages will pile up as unacknowledged and may block new deliveries. -> Option A
  4. Quick Check:

    No ack + autoAck=false = message pileup [OK]
Hint: No ack with autoAck=false causes message buildup [OK]
Common Mistakes:
  • Assuming messages auto-acknowledge anyway
  • Thinking RabbitMQ deletes queues automatically
  • Believing consumer crashes without ack
5. You want to ensure that a batch of 5 messages is processed before sending a single acknowledgment to RabbitMQ. Which strategy should you use?
hard
A. Set autoAck=true to acknowledge messages automatically.
B. Call basicAck(deliveryTag, false) after each message individually.
C. Call basicAck(deliveryTag, true) after processing the 5th message to acknowledge all previous messages.
D. Call basicReject(deliveryTag, false) after processing the batch.

Solution

  1. Step 1: Understand the multiple flag in basicAck

    Setting the second parameter of basicAck to true acknowledges all messages up to the given deliveryTag.
  2. Step 2: Use batch acknowledgment for efficiency

    After processing 5 messages, calling basicAck(deliveryTag, true) acknowledges all 5 at once, improving performance.
  3. Final Answer:

    Call basicAck(deliveryTag, true) after processing the 5th message to acknowledge all previous messages. -> Option C
  4. Quick Check:

    Batch ack uses basicAck with multiple=true [OK]
Hint: Use basicAck with multiple=true for batch ack [OK]
Common Mistakes:
  • Calling basicAck with multiple=false for batch
  • Using autoAck=true when manual control needed
  • Confusing basicReject with acknowledgment
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