Как настроить двунаправленную лопату RabbitMQ и избежать бесконечного цикла?

У меня есть 2 кластера RabbitMQ в отдельных центрах обработки данных. На данный момент мы перелопачиваем одну из бирж от одного кролика к другому, но теперь нам нужно перелопатить и в другом направлении. Как мы можем добиться этого, не вызывая бесконечный цикл?

Коллега подумал, что мы могли бы отметить параметры «Добавить заголовки пересылки», а затем отфильтровать, используя обмен заголовками. Однако добавленные заголовки кажутся вложенными, и я не нашел способа сопоставить заголовки?


person Tom    schedule 26.04.2018    source источник
comment
Не могли бы вы предоставить больше контекста относительно вашего варианта использования? Есть ли причины, по которым вы выбрали лопату вместо федерации?   -  person Olivier    schedule 27.04.2018
comment
Только то, что лопатой мы уже пользуемся и с ней знакомы. Не очень знаком с федерацией, посмотрю. По сути, у нас есть кролик в каждом центре обработки данных, у каждого из которых производитель пишет для обмена с тем же именем. Затем у нас есть очереди, привязанные к этим обменам, и нам нужно, чтобы в этих очередях были все сообщения от обоих производителей. поэтому нам нужно реплицировать оба способа, но нужно избегать репликации уже реплицированных сообщений.   -  person Tom    schedule 27.04.2018


Ответы (1)


Судя по предоставленному вами дополнительному описанию, это:

  • Вы используете лопату между обменами
  • Предполагая, что тип обмена - разветвление

Я вижу два подхода к тому, что вы пытаетесь сделать:

  • Используйте федерацию и настройте ее в обоих направлениях между биржами в каждом кластере.
  • По-прежнему используйте лопату, но определяйте новую очередь для каждого обмена и настраивайте очередь для лопаты очереди.

Для варианта лопаты: У вас есть биржа A на кластере 1, биржа A на кластере 2, ваша main_queue на каждом кластере

  • Создайте вторичную_очередь в каждом кластере, связанную с обменом A.
  • Создайте лопату из вторичной очереди в кластере 1 в main_queue в кластере 2.
  • Создайте лопату из вторичной очереди в кластере 2 в main_queue в кластере 1.

Преимущество федерации: проще, даже если у вас настроена сложная маршрутизация

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

person Olivier    schedule 28.04.2018
comment
Привет Оливье - спасибо за ваш ответ. Ваше решение с лопатой выглядит интересно, но когда я сказал, что очереди связаны, я имел в виду несколько очередей, поскольку есть несколько приложений, которым нужны все сообщения. Однако, если подумать, я думаю, что это может быть обмен с последующими очередями. Недостатком является то, что это потребует внесения изменений в существующие приложения-производители. Я обязательно изучу федерацию, но обеспокоен потенциальной потерей сообщений. Все еще очень хочется услышать решение, использующее сопоставление заголовков обмена. Вы знакомы с этим? - person Tom; 30.04.2018
comment
Привет, @Tom, я добросовестный пользователь RabbitMQ, поэтому, хотя я надеюсь, что мои комментарии помогут вам, я далеко не эксперт. Принимая это во внимание, я бы определенно рекомендовал изучить федерацию, поскольку из некоторых дополнительных чтений кажется, что она может выдерживать серьезные отключения с некоторыми параметрами. Что касается обмена заголовками, мне они не пригодились, хотя я знаю их логику. Наконец, трудно дать хорошую рекомендацию без дополнительной информации о вашей настройке, особенно о типе бирж, которые вы используете, и количестве очередей. - person Olivier; 30.04.2018
comment
Закончилось тем, что вы использовали вариант вашего подхода к вторичной очереди, который ввел второй уровень обменов и создал очередь, свисающую с обмена верхнего уровня, перелопачивающуюся на обмен нижнего уровня у другого брокера. - person Tom; 18.12.2018