Что такое очередь сообщений?
Очередь сообщений — это контейнер, в котором сообщения сохраняются в процессе передачи сообщений. По сути, это очередь (первым поступило, первым отправлено).
消息
относится к данным, которые необходимо передать, которые могут быть текстом, строкой или объектом и другой информацией.
消息队列
— это служба связи между двумя приложениями.产生者
сообщения может вернуть его сразу после сохранения данных в очереди сообщений, не дожидаясь ответа接收者
сообщения. То есть:生产者
гарантирует, что данные будут помещены в очередь, и не имеет значения, кто получит сообщение.接收者
сообщения фокусируется только на получении сообщения и его обработке.
Какое
разделение может обеспечить очередь сообщений? Как было сказано выше, очередь сообщений разделяет производителя сообщения и получателя сообщения, и ни один из них не влияет на другой.
Асинхронный Асинхронный режим предназначен для сокращения времени ответа на запросы. Производителю сообщения необходимо только обработать простую логику и поместить данные в очередь сообщений для возврата. Сложная логика, такая как операции с базой данных и операции ввода-вывода, обрабатывается получателем. сообщение.
Сглаживание пиковых значений Когда приложение очереди сообщений работает, оно может сохранять мгновенный приток информации о запросе в очередь сообщений и немедленно возвращать ее. Затем запрос обрабатывается на основе данных получателя сообщения.
Сценарии применения: игровая деятельность, флэш-распродажа, размещение заказов и т. д., которые вызовут мгновенный всплеск трафика.
После представления основной информации об очереди сообщений, прежде чем разрабатывать очередь сообщений, давайте представим некоторые основные понятия очереди сообщений ~
производителя (производителя) и потребителя (клиента).
生产者
и потребители, упомянутые выше.消费者
обеспечить
ссылки, каналы и очереди.
Соединение: представляет собой связь между служебной программой и очередью сообщений. Сервисная программа может создавать несколько ссылок .
Канал: канал между ссылками очереди сообщений. Ссылка может иметь несколько каналов .
Очередь. Очередь, в которой хранятся данные в очереди сообщений. Служба очереди сообщений может иметь несколько очередей.
Подводя итог, взаимосвязь между ссылками и очередями каналов выглядит следующим образом.
Очередь сообщенийобмена (обмена)
должна иметь обмен при отправке сообщений . Если не указано, будет использоваться обмен по умолчанию. Роль переключателя — помещать сообщения в соответствующую очередь. Всего в очереди сообщений имеется 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()); }); })();
После выполнения вы увидите, что оба канала могут работать одновременно для получения сообщений.