Кластер RabbitMQ с клиентом .Net - PullRequest
3 голосов
/ 23 мая 2011

На данный момент я прочитал много постов и блогов, и до сих пор не уверен, как правильно кластеризовать мои 2 узла RabbitMQ.

Я прочитал руководство по кластеризации RabbitMQ: http://www.rabbitmq.com/clustering.html

Я узнал о таинственном ClusterId в руководстве по API без объяснения того, как вообще получить этот Id: http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v2.4.1/rabbitmq-dotnet-client-2.4.1-api-guide.pdf

Изучил в этом посте StackOverflow, что в основном яМне нужно, чтобы мои клиенты знали о каждом узле в кластере и коде для сценария отработки отказа: Rabbitmq HA-кластер

Теперь ... Поведение, которое я хотел бы иметь, - это нечто большеепрозрачный, если это возможно.Где я мог бы потенциально использовать этот «ClusterId» на клиенте, чтобы информировать потребительский кластер, а затем, надеюсь, библиотека знает, как произвольно подключиться к любому узлу для получения сообщений.

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

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

Теперь, основываясь на моих показаниях, это не совсем так работает ... если только я что-то не пропустил.Если мои знания актуальны, и мне приходится кодировать весь этот кластерно-ориентированный бизнес, то ... почему RabbitMQ имеет функцию кластера в первую очередь?Как это используется?

Есть ли способ вывести подобное поведение из RabbitMQ без особого кодирования?

Спасибо

1 Ответ

5 голосов
/ 15 июня 2011

Я использую HAProxy для аварийного переключения и балансировки нагрузки между узлами кластера для rabbitmq, а также на стороне клиента .net, за исключением тех случаев, когда происходит сбой узла, вам необходимо вручную переподключить клиента.

Вот конфигурация HAProxy для кластера из двух узлов, узлы работают на 15672 и 25672 портах. Клиенты подключаются через порт 5672.

global
 daemon
 log 127.0.0.1 alert
 log 127.0.0.1 alert debug

defaults
 log global
 mode http
 option  dontlognull
 option  redispatch
 retries    3
 contimeout 5000
 clitimeout 50000
 srvtimeout 50000

listen rabbitmq 0.0.0.0:5672
  mode tcp
  balance roundrobin
  option  tcpka

server rabbit01 127.0.0.1:25672 check inter 5000 downinter 500

server rabbit02 127.0.0.1:15672 check inter 5000 backup

благодарность этому сообщению в блоге http://www.joshdevins.net/2010/04/16/rabbitmq-ha-testing-with-haproxy/

...