#rabbitmq
Вопрос:
Я пытаюсь понять RabbitMQ. Это кажется очень запутанным.
У меня есть 1 обмен с прямым типом. Он привязывается к 2 очередям. У меня нет ключей маршрутизации. Если я опубликую сообщение, оно попадет в обе очереди.
Чем это поведение отличается от разветвления? Или Прямой — это подмножество разветвления?
Ответ №1:
Без какого-либо кода здесь невозможно точно сказать, что вы делаете, поэтому я просмотрел документацию в Интернете и нашел некоторые вещи, которые могут быть полезны. Этот учебник по прямым очередям, по-видимому, предполагает, что fanout
очередь-это просто direct
очередь, в которой игнорируются все ключи привязки.
Значение ключа привязки зависит от типа обмена. Разветвленные биржи, которые мы использовали ранее, просто игнорировали его ценность.
Затем в нем говорится, что наличие ключа маршрутизации поможет сопоставить его с ключами привязки, если вы этого хотите.
Вместо этого мы будем использовать прямой обмен. Алгоритм маршрутизации, лежащий в основе прямого обмена, прост — сообщение отправляется в очереди, ключ привязки которых точно совпадает с ключом маршрутизации сообщения.
Затем далее в нем оговаривается, что вы можете заставить direct
очередь действовать как fanout
очередь, если хотите.
Совершенно законно связывать несколько очередей одним и тем же ключом привязки. В нашем примере мы могли бы добавить привязку между X и Q1 с ключом привязки черного цвета. В этом случае прямой обмен будет вести себя как разветвление и будет транслировать сообщение во все соответствующие очереди. Сообщение с ключом маршрутизации черного цвета будет доставлено как в первый, так и во второй квартал.
Возможно, это то, что происходит в вашем случае? Не стесняйтесь прочитать этот учебник, чтобы лучше разобраться в direct
очередях, и предыдущий (ссылка вверху этого учебника), чтобы узнать больше об fanout
очередях.