Как загрузить дистрибутив в кластере RabbitMQ?


Привет я создаю три сервера RabbitMQ работающих в кластере на EC2

Я хочу масштабировать базу кластера RabbitMQ по использованию ЦП, но когда я публикую сообщение, только один сервер использует ЦП, а другой RabbitMQ-сервер не использует ЦП

Итак, как я могу распределить нагрузку по кластеру RabbitMQ

2 6

2 ответа:

Кластеры RabbitMQ предназначены для улучшения масштабируемости, но система не является полностью автоматической.

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

Чтобы правильно использовать кластеры RabbitMQ, необходимо убедиться, что вы делаете следующие вещи:

  • имеют несколько распределенных очередей между узлами, так что работа распределяется несколько равномерно,
  • подключите своих клиентов к разным узлам (в противном случае вы можете перенаправить все сообщения через один узел), и
  • Если вы можете, попробуйте подключить издателей/потребителей к узлу, который содержит очередь, которую они используют (чтобы минимизировать передачу сообщений внутри кластера).

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

Это не совсем так. Ознакомьтесь с документацией по этому вопросу.

Сообщения, опубликованные в очереди, реплицируются на все зеркала. Потребители подключаются к ведущему узлу независимо от того, к какому узлу они подключаются, а зеркала отбрасывают сообщения, которые были подтверждены на ведущем узле. Таким образом, зеркальное отображение очередей повышает доступность, но не распределяет нагрузку между узлами (все участвующие узлы выполняют всю работу).