
Что такое очередь сообщений?
Очередь сообщений — это контейнер, в котором сообщения сохраняются в процессе передачи сообщений. По сути, это очередь (первым поступило, первым отправлено).

消息относится к данным, которые необходимо передать, которые могут быть текстом, строкой или объектом и другой информацией.
消息队列— это служба связи между двумя приложениями.产生者сообщения может вернуть его сразу после сохранения данных в очереди сообщений, не дожидаясь ответа接收者сообщения. То есть:生产者гарантирует, что данные будут помещены в очередь, и не имеет значения, кто получит сообщение.接收者сообщения фокусируется только на получении сообщения и его обработке.

Какое
разделение может обеспечить очередь сообщений? Как было сказано выше, очередь сообщений разделяет производителя сообщения и получателя сообщения, и ни один из них не влияет на другой.
Асинхронный Асинхронный режим предназначен для сокращения времени ответа на запросы. Производителю сообщения необходимо только обработать простую логику и поместить данные в очередь сообщений для возврата. Сложная логика, такая как операции с базой данных и операции ввода-вывода, обрабатывается получателем. сообщение.
Сглаживание пиковых значений Когда приложение очереди сообщений работает, оно может сохранять мгновенный приток информации о запросе в очередь сообщений и немедленно возвращать ее. Затем запрос обрабатывается на основе данных получателя сообщения.
Сценарии применения: игровая деятельность, флэш-распродажа, размещение заказов и т. д., которые вызовут мгновенный всплеск трафика.
После представления основной информации об очереди сообщений, прежде чем разрабатывать очередь сообщений, давайте представим некоторые основные понятия очереди сообщений ~
производителя (производителя) и потребителя (клиента).
生产者и потребители, упомянутые выше.消费者обеспечить
ссылки, каналы и очереди.
Соединение: представляет собой связь между служебной программой и очередью сообщений. Сервисная программа может создавать несколько ссылок .
Канал: канал между ссылками очереди сообщений. Ссылка может иметь несколько каналов .
Очередь. Очередь, в которой хранятся данные в очереди сообщений. Служба очереди сообщений может иметь несколько очередей.
Подводя итог, взаимосвязь между ссылками и очередями каналов выглядит следующим образом.

обмена (обмена)
должна иметь обмен при отправке сообщений . Если не указано, будет использоваться обмен по умолчанию. Роль переключателя — помещать сообщения в соответствующую очередь. Всего в очереди сообщений имеется 4 типа переключателей
: Прямой: укажите режим очереди. Когда приходит сообщение, оно будет отправлено только в указанную очередь, а другие очереди его не получат.
fanout: режим широковещания, когда приходит сообщение, оно будет отправлено во все очереди.
тема: режим нечеткого сопоставления, соответствующая пересылка посредством нечеткого сопоставления.
заголовок: Аналогичен режиму Direct.
заварить установку RabbitMQ

Затем посетите http://localhost:15672/ локально, чтобы просмотреть предысторию службы RabbitMQ. Первоначальный пароль учетной записи — guest

amqplib — набор инструментов для использования очередей сообщений в узле, который позволяет нам быстро использовать очереди сообщений.
Создать продюсераАдрес: https://www.npmjs.com/package/amqplib
/** потребитель product.js*/
const amqplib = require('amqplib');
const config = require('./config');
const {connectUrl} = конфигурация;
(асинхронный () => {
const Connection = ждут amqplib.connect(connectUrl);
константный канал = ждут соединения.createChannel();
const ExchangeName = 'testExchange';
константный ключ = 'testQueue';
const sendMsg = 'привет, RabbitMQ';
// Знаем тип переключателя awaitchannel.assertExchange(exchangeName, 'fanout', {
прочный: правда,
});
//Указываем очередь ожидания канала.assertQueue(key);
для (пусть я = 0; я < 100; я++) {
Channel.publish(exchangeName, key, Buffer.from(`${sendMsg} ${i}`));
}
дождитесь канала.закрыть();
дождитесь соединения.закрыть();
})();После запуска вы можете увидеть в фоновом режиме, что была добавлена новая очередь со 100 сообщениями.

/** потребитель customer.js*/
const amqplib = require('amqplib');
const config = require('./config');
const {connectUrl} = конфигурация;
(асинхронный () => {
пусть соединение = ждут amqplib.connect(connectUrl);
const ExchangeName = 'testExchange';
константный ключ = 'testQueue';
//Создаем два канала const Channel1 = await Connection.createChannel();
const Channel2 = ждут соединения.createChannel();
//Указываем обмен, ожидающий канала1.assertExchange(exchangeName, 'fanout', {
прочный: правда,
});
//Указываем очередь ожидания Channel1.assertQueue(key);
дождитесь канала1.bindQueue(ключ, имя_обмена, ключ);
канал1.consume(ключ, (сообщение) => {
console.log('канал 1', msg.content.toString());
});
awaitchannel2.assertExchange(exchangeName, 'fanout', {
прочный: правда,
});
дождитесь канала2.assertQueue(ключ);
дождитесь канала2.bindQueue(ключ, имя_обмена, ключ);
Channel2.consume(ключ, (сообщение) => {
console.log('канал 2', msg.content.toString());
});
})();После выполнения вы увидите, что оба канала могут работать одновременно для получения сообщений.
