Объявление очереди на всех узлах в RabbitMQ

У меня есть установка кластера Rabbitmq (без HA). Мои потребители - это пружинные приложения, и он обеспечивает механизм восстановления после сбоя из коробки, где он подключается к следующему доступному узлу.

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

Другой вопрос, скажем, у меня есть баланс нагрузки на вершине кластера Rabbitmq. Мои приложения подключаются с использованием баланса нагрузки. Будут ли очереди объявлены на всех узлах или они будут объявлены на узле на основе стратегии маршрутизации LB.

1 ответ

Для первого сценария да, очереди будут объявлены в экземпляре посредника отработки отказа при установлении соединения.

Если вы хотите предварительно объявить на всех узлах, вам понадобится фабрика соединений для каждого узла, и RabbitAdmin для каждой фабрики соединений.

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

Вы можете сделать это, добавив bean-объект SmartLifecycle и позвонить createConnection() на каждой фабрике соединений.

Вы также можете выборочно объявить элементы. См. Условное заявление.

По умолчанию все очереди, обмены и привязки объявляются всеми RabbitAdmin случаи (которые имеют auto-startup="true") в контексте приложения.

Начиная с версии 1.2, можно условно объявить эти элементы. Это особенно полезно, когда приложение подключается к нескольким брокерам и должно указывать, с какими брокерами должен быть объявлен конкретный элемент.

Другие вопросы по тегам