Зачем мне нужна очередь в публикации RabbitMQ?
Я использую Node.js с node-amqp для создания простой очереди сообщений. Большинство примеров, которые я вижу, делают следующее:
- Создать соединение
- Создать обмен
- Создайте очередь и привяжите ее к Exchange
- Опубликовать через биржу
В моем коде я опускаю очередь (шаг 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 на уровне канала), но если для определенного сообщения не существует надлежащих очередей и привязок, оно будет потеряно (или неопечатано, см. Разделы обмена недоставленными буквами и альтернативные сообщения). Обмены на большее).