Вопрос проверяет знание базовых компонентов RabbitMQ, необходимых для понимания работы брокера сообщений.
RabbitMQ — это брокер сообщений, реализующий протокол AMQP. Его архитектура строится на нескольких ключевых компонентах, которые взаимодействуют для надежной доставки сообщений.
Это приложение, которое отправляет сообщения. Producer не отправляет сообщения напрямую в очередь, а публикует их в exchange.
Exchange получает сообщение от producer и решает, в какие очереди его направить. Тип exchange определяет логику маршрутизации:
Очередь хранит сообщения до тех пор, пока consumer их не заберет. Очереди могут быть durable (сохраняются при перезапуске) или transient.
Binding — это правило, которое связывает exchange с очередью. Оно определяет, какие сообщения из exchange попадут в очередь, используя routing key.
Consumer подписывается на очередь и обрабатывает сообщения. Он может подтверждать обработку (ack) или отклонять сообщение.
const amqp = require('amqplib');
async function run() {
const conn = await amqp.connect('amqp://localhost');
const ch = await conn.createChannel();
const exchange = 'logs';
const queue = 'my_queue';
const routingKey = 'info';
// Создаем exchange типа direct
await ch.assertExchange(exchange, 'direct', { durable: true });
// Создаем очередь
await ch.assertQueue(queue, { durable: true });
// Связываем очередь с exchange по routing key
await ch.bindQueue(queue, exchange, routingKey);
// Отправляем сообщение
ch.publish(exchange, routingKey, Buffer.from('Hello RabbitMQ'));
// Потребляем сообщения
ch.consume(queue, (msg) => {
console.log(msg.content.toString());
ch.ack(msg);
});
}
run();В этом примере producer отправляет сообщение в exchange 'logs' с routing key 'info'. Exchange направляет его в очередь 'my_queue', откуда consumer забирает и обрабатывает.
Понимание сущностей RabbitMQ необходимо для проектирования надежных систем обмена сообщениями. Используйте их для создания гибкой маршрутизации, балансировки нагрузки и асинхронной обработки задач.