Введение в RabbitMq
RabbitMq — это брокер сообщений, который позволяет отправлять и получать сообщения между различными службами. Это брокер сообщений, реализующий расширенный протокол очереди сообщений (AMQP). Написано на языке программирования Erlang.
RabbitMq можно установить в разных операционных системах, используя соответствующие менеджеры пакетов. RabbitMQ требует, чтобы Erlang/OTP был установлен заранее, для получения дополнительной информации обратитесь к официальной документации.
sudo apt-get install rabbitmq-server
brew install rabbitmq
После установки мы можем запустить сервер RabbitMq, используя следующую команду:
sudo rabbitmq-server
После запуска сервера мы можем получить доступ к RabbitMQ из нашего приложения, используя порт по умолчанию 5672.
Чтобы включить консоль управления RabbitMq, мы можем запустить следующую команду:
sudo rabbitmq-plugins enable rabbitmq_management
мы можем получить доступ к консоли управления RabbitMq, посетив http://localhost:15672/ в своем браузере. Имя пользователя и пароль по умолчанию — Guest.
Для взаимодействия с RabbitMq из NodeJs мы можем использовать библиотеку amqplib. Мы можем установить библиотеку с помощью следующей команды:
npm install amqplib
Чтобы подключиться к RabbitMq из NodeJs и создать канал для взаимодействия с RabbitMq, мы можем использовать следующий код:
const amqp = require("amqplib"); const connect = async (url) => { const connection = await amqp.connect(url); const channel = await connection.createChannel(); return channel; }; connect("amqp://localhost:5672").then((channel) => { console.log("Connected to RabbitMQ"); channel.close(); process.exit(0); });
Теперь у нас есть канал для взаимодействия с RabbitMq. Мы можем использовать этот канал для отправки и получения сообщений от RabbitMq. назовем нашу очередь mq-test-queue и отправим сообщение в очередь.
connect("amqp://localhost:5672").then((channel) => { console.log("Connected to RabbitMQ"); channel.assertQueue("mq-test-queue"); console.log("Queue created"); channel.sendToQueue("mq-test-queue", Buffer.from("Hello World!")); console.log("Message sent"); });
Мы создали очередь mq-test-queue и отправили сообщение Hello World! в очередь. Чтобы создать очередь, мы использовали метод AssertQueue, а для отправки сообщения в очередь — метод sendToQueue.
Чтобы получить сообщение из очереди, мы можем использовать метод Consumer.
connect("amqp://localhost:5672").then((channel) => { console.log("Connected to RabbitMQ"); channel.assertQueue("mq-test-queue"); console.log("Queue created"); channel.sendToQueue("mq-test-queue", Buffer.from("Hello World!")); console.log("Message sent"); channel.consume("mq-test-queue", (msg) => { console.log("Message received", msg.content.toString()); }); });
Метод Consumer принимает функцию обратного вызова и передает объект сообщения функции обратного вызова для доступа к содержимому сообщения с помощью msg.content.toString().
После использования сообщения нам нужно подтвердить или отключить сообщение, чтобы удалить его из очереди. Мы можем использовать метод ack для подтверждения сообщения и метод nack для отклонения сообщения.
В этом примере мы подтвердим сообщение после его использования.
const amqp = require("amqplib"); const connect = async (url) => { const connection = await amqp.connect(url); const channel = await connection.createChannel(); return channel; }; connect("amqp://localhost:5672").then((channel) => { console.log("Connected to RabbitMQ"); channel.assertQueue("mq-test-queue"); console.log("Queue created"); channel.sendToQueue("mq-test-queue", Buffer.from("Hello World!")); console.log("Message sent"); channel.consume("mq-test-queue", (msg) => { console.log("Message received", msg.content.toString()); channel.ack(msg); }); });
Мы можем видеть сообщения, успешно отправленные и полученные из очереди. с помощью консоли управления RabbitMQ.
В этой статье мы узнали, как настроить RabbitMq и взаимодействовать с RabbitMq из NodeJs с помощью библиотеки amqplib. Мы создали очередь, отправили сообщение в очередь и получили сообщение из очереди.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3