DEV Community

Abhishek Yadav
Abhishek Yadav

Posted on

How to Connect Express app to RabbitMQ

Introduction

RabbitMQ is an open-source message broker software that facilitates message queuing. It provides a platform for different software components to communicate by sending and receiving messages.
Now let's go through the process of connecting RabbitMQ to our Express App
Step-1
Run RabbitMQ on your machine
Easiest way to do this use docker image of rabbitmq and run this docker image.

docker pull rabbitmq
Enter fullscreen mode Exit fullscreen mode

Then run the docker image using this command

docker run -d -p 15672:15672 -p 5672:5672 --hostname my-rabbitmq --name my-rabbitmq-container rabbitmq:3-management
Enter fullscreen mode Exit fullscreen mode

Step-2
Create Express app

const express = require('express');

const app = express();
const PORT = 3000;

app.post('/orders', (req, res) => {
    res.send('Order submitted');
});

app.listen(PORT, () => {
    console.log(`Server running on ${PORT}`);
});
Enter fullscreen mode Exit fullscreen mode

Test your app using postman

Step-3
Now it is time add code to connect to rabbitmq
To rabbitmq we need amqplib npm package install this package in your project

npm install amqplib
Enter fullscreen mode Exit fullscreen mode

Now add code for connection to rabbitmq in your express app

const amqplib = require('amqplib');
const express = require('express');

const app = express();
const PORT = 9005;
let channel, connection;

async function connect() {
    try {
        const amqpServer = 'amqp://localhost:5672';
        connection = await amqplib.connect(amqpServer);
        channel = await connection.createChannel();
        await channel.assertQueue('order');
    } catch (error) {
        console.log(error);
    }
}

app.post('/orders', (req, res) => {
const data = {message: 'Order placed'};
    channel.sendToQueue('order', Buffer.from(JSON.stringify({ ...data, date: new Date() })));
    res.send('Order submitted');
});

app.get('*', (req, res) => {
    res.status(404).send('Not found');
});

app.listen(PORT, () => {
    connect();
    console.log(`Server running on ${PORT}`);
});


Enter fullscreen mode Exit fullscreen mode

To make sure your you are connected to rabbitmq you can check rabbitmq management dashboard
You can access it on

http://localhost:15672/
Enter fullscreen mode Exit fullscreen mode

login credentials are
Username : guest
Password : guest
Now check connection you will find you are connected
Connection tab image

Now check queue you will find queue created with the name you have given to your queue in my case order

Queue tab image

Now to check you are receiving the data you are sending to queue and perform operation on that make another project install amqplib
Create a file with name worker.js

Now write the code to connect to rabbitmq and also to receive message sent by our express app from the queue

const amqp = require('amqplib');

const connectToRabbitMQ = async () => {
    try {
        const connection = await amqp.connect('amqp://localhost:5672');
        const channel = await connection.createChannel();
        return channel;
    } catch (error) {
        console.error('Error connecting to RabbitMQ:', error);
    }
};

const receiveMessageFromQueue = async (queueName) => {
    const channel = await connectToRabbitMQ();

    channel.assertQueue(queueName, { durable: true });
    channel.consume(queueName, (message) => {
        const content = message.content.toString();
        //perform operations on the message
        console.log(`Received message: ${content}`);
    });
};

const queueName = 'order'; // Replace with your queue name
receiveMessageFromQueue(queueName);

Enter fullscreen mode Exit fullscreen mode

The receiveMessageFromQueue function will process the message sent to queue.

Thank you for taking the time to read. I'm in a continuous process of learning and sharing. If you spot any mistakes in my understanding or have any other insights, please feel free to let me know in the comments section.

Top comments (0)