Зачем мне нужна очередь в публикации RabbitMQ?

Я использую Node.js с node-amqp для создания простой очереди сообщений. Большинство примеров, которые я вижу, делают следующее:

  1. Создать соединение
  2. Создать обмен
  3. Создайте очередь и привяжите ее к Exchange
  4. Опубликовать через биржу

В моем коде я опускаю очередь (шаг 3), поскольку она не используется для публикации.

var _connection = amqp.createConnection(_options);

_connection.on('ready', function() {

    _connection.exchange('myexchange', { type: 'direct', autoDelete: false }, function(ex) {

        ex.publish({hello:'world'});
    });
});

Это нормально? или есть причина для очереди?

2 ответа

Решение

Нет ничего плохого в том коде, который у вас есть. Это хороший пример того, как вы можете сделать ваш производитель сообщений красивым и простым / чистым.

Тем не менее, код, который вы показали, это только половина решения для обмена сообщениями. Вам нужен как производитель сообщений, как показано, так и потребитель сообщений.

Потребитель сообщений

Потребитель сообщений - это код, который выполняет настоящую работу. Он получает сообщение из очереди, на которую он подписан, и обрабатывает это сообщение тем способом, который вы ему сообщаете.

Это ключ, здесь - потребитель сообщений будет использовать сообщение из очереди. Если вы хотите отправить сообщение и обработать его, у вас должна быть очередь для сообщения.

Аналогия с почтовой системой

Думайте об этом так:

Когда вы пишете письмо (ручку и бумагу), вы кладете его в конверт. Затем вы пишете адрес на конверте и отправляете его через свою почтовую систему. Почтовая система знает, что означает адрес, отправляет его через различные грузовики и центры обработки почты и в конечном итоге помещает его в почтовый ящик для получателя.

То же самое и с обменом сообщениями в RabbitMQ.

Вы доставляете письмо в пункт назначения. Вы пишете "адрес" (обменное имя и ключ маршрутизации) в сообщении, и RabbitMQ выясняет, как доставить его в соответствующее место.

При обычной почте ваше письмо помещается в почтовый ящик, чтобы его могли прочитать. С RabbitMQ и системой обмена сообщениями ваше сообщение помещается в очередь для некоторого программного обеспечения для чтения.

Вам нужна очередь для программного обеспечения, чтобы получить сообщение и обработать его.

...

PS Если вам нужны некоторые базовые материалы по RabbitMQ и NodeJS, ознакомьтесь с моим пакетом RabbitMQ For Developers. Он поможет вам быстро начать работу с наиболее распространенными вопросами и шаблонами RMQ.

Очереди создаются в явном виде и обмениваются, чтобы убедиться, что опубликованное сообщение не будет потеряно в том случае, если ранее не существовало никаких очередей и привязок.

В RabbitMQ большинство операций над созданием сущностей (обмены, очереди, привязки) идемпотентны. Это означает, что если вы вызываете их более одного раза с одинаковыми аргументами, они предоставят тот же результат, что и вызванный один раз.

В случае обмена вы не можете выполнить публикацию в несуществующий обмен (возникает исключение AMQP на уровне канала), но если для определенного сообщения не существует надлежащих очередей и привязок, оно будет потеряно (или неопечатано, см. Разделы обмена недоставленными буквами и альтернативные сообщения). Обмены на большее).

Другие вопросы по тегам