Simple Message Queue
Messaging Queue enables asynchronous communication, where the application puts a message onto a message queue and does not require an immediate response to continuing processing. The producer and consumer do not interact directly with each other, but they interact with the message queue. This way of handling messages decouples the producer from the consumer so that they do not need to interact with the message queue simultaneously.
In this article, we will look at how to build a simple message queue in Node.js and RabbitMQ.
Initializing Node.js Application
Initialize the application using the following commands:
mkdir node-queue
cd node-queue
npm init -y
create file index.js
Install the AMQP dependency which will be used for integrating the Node.js application with RabbitMQ.
npm install –-save amqplib
Installing RabbitMQ
I have installed RabbitMQ to demonstrate this example by downloading here. Once you have installed it, create a queue called “send_email”.
In the above code snippet, we have imported amqplib. We establish the connection to RabbitMQ server using amqp.connect(). Then we create a channel within which the API for sending messages to the queue resides.
channel.assertQueue() asserts a queue into existence. If the queue does not exist, it will create on the server. The message will be sent to the server in byte array format. The connection will be closed after a short period of time.
Now, start the Node.js app by running the command: node index.js.
Navigate to the RabbitMQ dashboard. We will see that one message is ready in the queue.
channel.assertQueue() asserts a queue into existence. If the queue does not exist, it will create on the server. The message will be sent to the server in byte array format. The connection will be closed after a short period of time.
Now, start the Node.js app by running the command: node index.js.
Navigate to the RabbitMQ dashboard. We will see that one message is ready in the queue.
Establishing the connection to the RabbitMQ server is the same as the producer. We establish the connection and declare the queue from which we will consume messages.
We also assert queue here as a consumer might start before the publisher, therefore we want to ensure that the queue exists before the consumer tries to consume messages from it.
channel.consume() retrieves the message from the server.
Restart the application and navigate to the dashboard. We will see that no messages are left to be consumed.
Some real-life examples could include:
- Images Scaling
- Sending large/many emails
- Search engine indexing
- File scanning
- Video encoding
- Delivering notifications
- PDF processing
- Calculations