Чтобы использовать очередь rabbitmq, мне действительно нужно объявлять обмен и очередь?

Во всех примерах, которые я нахожу в Интернете, я вижу, что обмен и очередь объявляются до того, как сообщения будут использованы. Объявление обмена кажется странным, потому что зачем мне это делать? Я использую очередь, которая может быть связана с несколькими обменами (или ни с одним, может быть, в ней просто есть старые сообщения).

Кроме того, я не могу придумать, зачем объявлять очередь. Это потребует от меня информации об очереди, которую мне не нужно знать для ее использования (например, auto_delete и долговечность).

Когда я тестировал это локально, я мог использовать очередь, ничего не объявляя. Оно работает. Так что мне остается задаться вопросом, почему каждый пример, который я видел в Интернете, объявляет обмен и очередь, даже если он просто их потребляет?

Спасибо!!!


person polo    schedule 01.04.2015    source источник


Ответы (2)


«Все» примеры, которые вы видели, самодостаточны. И они пытаются дать вам рабочий пример. Потому что, если у вас не настроены все компоненты, ваш пример не будет работать.

С точки зрения «зачем объявлять очередь». Пример из реальной жизни — когда ваш потребитель хочет использовать сообщения, соответствующие текущей конфигурации. В этом случае он создаст эксклюзив (никто другой не сможет подключиться к этой очереди) и начнет потреблять сообщения.

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

person Vor    schedule 01.04.2015

В общем, вам не нужно объявлять обмен и очередь в потребителе. Вы должны собрать топологию «биржи/очереди» где-то еще. Это как схема в базе данных.

Но всегда есть исключения. Когда вам нужна «частная» очередь (exclusive=true) для обработки в реальном времени, потребитель должен знать (по конфигурации) об исходном обмене и привязывать к нему собственную очередь.

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

person user1295211    schedule 02.04.2015