RabbitMQ — Прямая трансляция против разветвления

#rabbitmq

Вопрос:

Я пытаюсь понять RabbitMQ. Это кажется очень запутанным.

У меня есть 1 обмен с прямым типом. Он привязывается к 2 очередям. У меня нет ключей маршрутизации. Если я опубликую сообщение, оно попадет в обе очереди.

Чем это поведение отличается от разветвления? Или Прямой — это подмножество разветвления?

Ответ №1:

Без какого-либо кода здесь невозможно точно сказать, что вы делаете, поэтому я просмотрел документацию в Интернете и нашел некоторые вещи, которые могут быть полезны. Этот учебник по прямым очередям, по-видимому, предполагает, что fanout очередь-это просто direct очередь, в которой игнорируются все ключи привязки.

Значение ключа привязки зависит от типа обмена. Разветвленные биржи, которые мы использовали ранее, просто игнорировали его ценность.

Затем в нем говорится, что наличие ключа маршрутизации поможет сопоставить его с ключами привязки, если вы этого хотите.

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

Затем далее в нем оговаривается, что вы можете заставить direct очередь действовать как fanout очередь, если хотите.

Совершенно законно связывать несколько очередей одним и тем же ключом привязки. В нашем примере мы могли бы добавить привязку между X и Q1 с ключом привязки черного цвета. В этом случае прямой обмен будет вести себя как разветвление и будет транслировать сообщение во все соответствующие очереди. Сообщение с ключом маршрутизации черного цвета будет доставлено как в первый, так и во второй квартал.

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