





















































(For more resources related to this topic, see here.)
This task will examine reliable message delivery from the RabbitMQ server to a consumer.
If a consumer takes a message/order from our queue and the consumer dies, our unprocessed message/order will die with it.
In order to make sure a message is never lost, RabbitMQ supports message acknowledgments or acks. When a consumer has received and processed a message, an acknowledgment is sent to RabbitMQ from the consumer informing RabbitMQ that it is free to delete the message. If a consumer dies without sending an acknowledgment, RabbitMQ will redeliver it to another consumer.
Let's navigate to our source code examples folder and locate the folder Message-Acknowledgement. Take a look at the consumer.js script and examine the changes we have made to support acks.
q.subscribe({ack:true}, function(message) {
q.shift();
You can also use the prefetchCount option to increase the window of how many messages the server will send you before you need to send an acknowledgement. {ack:true, prefetchCount:1} is the default and will only send you one message before you acknowledge. Setting prefetchCount to 0 will make that window unlimited. A low value will impact performance, so it may be worth considering a higher value.
Let's demonstrate this concept.
rabbitmq-server
Message-Acknowledgement> node producer
Let the producer create several message/orders; press Ctrl + C while on the command-line console to stop the producer creating orders. Now execute the following to begin consuming messages:
Message-Acknowledgement> node consumer
rabbitmqctl list_queues messages_ready
messages_unacknowledged
The response should display our shop queue; details include the name, the number of messages ready to be processed, and one message which has not been acknowledged.
Listing queues ...
shop.queue 9 1
...done.
Listing queues ...
shop.queue 10 0
...done.
If you edit the change we made to consumer.js script and re-run these steps, the application will work correctly, consuming messages one at a time and sending an acknowledgment to RabbitMQ when each message has been processed.
This article explained a reliable message delivery process in RabbitMQ using Acknowledgements. It also listed the steps that will give you acknowledegements for a messaging application using scripts in RabbitMQ.
Further resources on this subject: