Как сделать отказоустойчивость очередей RabbitMQ? - PullRequest
12 голосов
/ 05 августа 2010

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

Я думаю о настройке, в которой есть две очереди.Когда сообщение публикуется, я хочу, чтобы кластер RabbitMQ отправлял сообщение в любую из двух очередей, в зависимости от того, какая из них активна.Я знаю, что издатель получит ошибку, если попытается опубликовать в очереди, которая не работает, и что издатель может повторить попытку с другой очередью, но мне интересно, можно ли это сделать автоматически на уровне кластера, чтобы яне нужно писать код клиента, чтобы справиться с этим.Можно ли это сделать?

Ответы [ 3 ]

12 голосов
/ 08 февраля 2012

Недавно RabbitMQ добавил активную / активную встроенную поддержку. http://www.rabbitmq.com/ha.html

6 голосов
/ 05 августа 2010

Посмотрите на Альтернативные биржи .

Это в основном то, что вы просили, но с обменами вместо очередей. Идея будет заключаться в публикации на бирже с указанным альтернативным обменом (вы можете сделать это с любым из клиентов RabbitMQ). Если сообщение может быть доставлено первому, оно будет. Если нет (из-за того, что он не может быть достигнут или из-за того, что к нему не привязаны очереди), используется альтернатива.

4 голосов
/ 29 августа 2013

Очереди с высокой доступностью или зеркальные очереди - золотой стандарт для Rabbit HA.

...