2014-11-22 3 views
1

Давайте рассмотрим приведенный ниже сценарий.RabbitMQ clustering model

Существует 3 брокера RabbitMQ (B1, B2, B3), развернутых в кластерной модели. Существует обмен E с привязками, который реплицируется для всех 3 брокеров. Существует производитель P и 3 потребителя C1, C2, C3. У меня есть следующие вопросы

  1. позволяет сказать, что производитель подключается к брокеру B1 и создает очередь Q, который отражал В2. Теперь, когда потребитель подключается к Брокеру B3, как он получает сообщения в очереди?

  2. По моему мнению, информация об обмене и привязке хранится в памяти каждого брокера. Если обмен является постоянным, для восстановления после сбоев брокера, информация об обмене и привязке также сохраняется на диске во всех брокерах?

  3. Если вся очередь хранится в памяти во всех зеркальных брокерах, она потребляет много памяти у брокера. Чтобы поддерживать потенциально большое количество очередей, каждый из которых содержит миллионы сообщений в каждом брокере, не является ли это препятствием для масштабируемости?

ответ

1
  1. Каждый зеркальный очередь имеет главный узел. Главный узел для этой очереди всегда используется для потребления. Поэтому, когда потребитель подключается к узлу, который не имеет хранилища очередей (или является подчиненным узлом), потребитель фактически в конечном итоге потребляет главный узел.

  2. Да, если узел является узлом диска, а не узлом ОЗУ. Я не уверен на 100% о привязке, но я думаю, что да. В любом случае, настоятельно рекомендуется всегда объявлять все очереди, обмены и т. Д., Которые нужны вашему клиенту! (делать это каждый раз, когда клиент запускается или что-то еще)

  3. Да, это точка зеркалирования: добавьте избыточность в случае, если что-то пойдет не так. Это не увеличивает производительность (скорее наоборот). Но в целом очереди с миллионами сообщений не совсем хорошие, так как очереди в среднем должны быть пустыми

+0

Хорошая точка на 3-м предмете. Сервер очередей не должен выступать в качестве огромного буфера для остальной части приложения - скорее, он должен облегчить общую функцию приложения и вообще быть пустым. – theMayer

+0

@Martin: В первом случае, когда вы говорите, что потребитель в конечном итоге будет потреблять главный узел, справляется ли брокер с мастером? –