Published 2023-07-28
In RabbitMQ, the prefetch size control how many messages a consumer would pull from the queue.
By default if you do not specify, it would be 250 messages according to the this article in Rabbitmq.
However, I faced the scenario where I would prefer to process one message only every single time. And the question is how?
The simple answer is to set your prefetch size to 1
in your consumer channel.
Below is the sample code write with npm package amqp-connection-manager
.
import amqp from "amqp-connection-manager";
async function initConsumer() {
const connection = amqp.connect("amqp://localhost");
const channelWrapper = connection.createChannel({
json: false,
setup: (channel: amqplib.ConfirmChannel) => {
const queue = "my-queue";
return Promise.all([
channel.assertQueue(queue),
// The MOST IMPORTANT part to configure how many messages the channel fetch from queue.
channel.prefetch(1),
channel.consume(queue, (message) => {
if (message) {
console.log(`Received message: ${message.content.toString()}`);
// Process the message here
channelWrapper.ack(message); // Acknowledge the message
}
}),
]);
},
});
await channelWrapper.waitForConnect();
}
TLDR, channel.prefetch(1)
is the answer here.
Thanks for reading and see you in the next one.