Как я могу подключиться к нескольким узлам Rabbitmq с помощью Spring Rabbitmq? - PullRequest
0 голосов
/ 20 декабря 2018

Я пишу сервис для Spring и использую Spring AMQP для подключения к Rabbitmq.

У меня есть два кластера rabbitmq, один только для публикации сообщений (сообщения отправляются в другой кластер).через плагин федерации), а другой кластер предназначен для объявления очередей, из которых будут потребляться конечные пользователи.

Узлы располагаются за aws lb, у каждого кластера есть фунты.

Я использую CachingConnectionFactory иRabbitTemplate, RabbitAdmin в моем коде, и я хочу иметь подключения ко всем узлам, чтобы я мог их использовать.Для кластера, который будет содержать очереди, которые я добавил в конфигурацию, queue-master-locator = random, поэтому новые очереди будут объявлены во всех узлах кластера, даже если моя служба не имеет к ним подключения.

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

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

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

Я использую Rabbitmq - 3.7.9, Spring - 2.0.5, Spring AMQP - 2.0.5

Большое спасибо!

1 Ответ

0 голосов
/ 20 декабря 2018

В настоящее время не существует механизма, позволяющего сделать что-либо подобное.

По умолчанию Spring AMQP открывает только одно соединение (необязательно два, одно для публикации, одно для потребления).

Даже когдаиспользуя CacheMode.CONNECTION, вы получите новое соединение для каждого потребителя (и соединения будут создаваться и кэшироваться по требованию производителей), вы не получите никакого контроля над тем, к какому узлу он подключается;это функция LB.

Фреймворк предоставляет LocalizedQueueConnectionFactory, который будет пытаться использовать от узла, на котором размещена очередь, но он не будет работать с балансировщиком нагрузки на месте.

В целом, однако, такая оптимизация требуется редко.

Вы пытаетесь решить реальную проблему, с которой сталкиваетесь сейчас, или то, что, по вашему мнению, может быть проблемой?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...