RabbitMQ MassTransit 集群问题

RabbitMQ MassTransit Clustering Issue

环境:RabbitMQ 3.8.14Erlang 23.2Masstrnasit 7.2.2Asp.net core 5.0 Windows server 2016.
我在不同的服务器中有两个名称为 rabbit@rabbitOnerabbit@rabbitTwo 的节点。
根据 RabbitMQ official documents,我为两个节点设置了相同的 erlang cookie。并将 rabbit@rabbitTwo 节点加入到 rabbit@rabbitOne 节点。
一切都是正确的。我在 rabbit@rabbitTwo 服务器的 RabbitMQ Mangement UI 中看到了两个节点。
我已经看到属于 'rabbit@rabbitOne' 的所有队列。
我还创建了一些类型为 Quorum Queues.

的队列

我使用以下代码配置了 MassTransit:

x.UsingRabbitMq((context, cfg) =>
                {
                    cfg.Host(configuration["clusterName"], opt =>
                    {
              //the host set and test with multiple value; cluster name or host Ip port of the rabbit@rabbitOne node.
  
                        opt.UseCluster(cluster =>
                        {
                            var nodes = configuration["Rabbit:Nodes"].Split(";");
                             //nodes set with Ip port. 
                            foreach (var node in nodes)
                            {
                                if (string.IsNullOrWhiteSpace(node))
                                    continue;

                                cluster.Node(node);
                            }
                        });

                        opt.Username(configuration["Rabbit:UserName"]);
                        opt.Password(configuration["Rabbit:Password"]);
                    });

现在,我将事件发布到队列中。他们正确地工作了。

问题:
我想simulate high availability,为了这个工作,我手动停止了rabbit@rabbitOne节点。我已经看到 rabbit@rabbitOne 节点的 down state 和他的所有队列,除了我的仲裁队列,它们在 running state 中。


但在这种情况下 (rabbit@rabbitOne) MassTransit 总线无法连接到 RabbitMQ。我得到了例外:'None of the specified endpoints were reachable'。 connection faild: "rabbitmq://myMlusterName"。 我知道什么意思。但我假设这个提示:尽管 rabbit@rabbitOne 节点已关闭,但具有仲裁队列的 rabbit@rabbitTwo 节点必须可用!。
小姐,我了解有关 RabbitMQ 集群的任何事情吗? 我想,我必须在 MassTransit 配置中为 Host 设置另一个值吗?
一定是我在 RabbitMQ 配置文件中为发现节点设置了什么吗? 还是另一个想念?

仲裁队列需要一个仲裁才能访问,这意味着 3 个节点中的 2 个,或 4 个节点中的 3 个,等等。只有一个节点可用的仲裁队列是不可能的。它是 (N/2)+1。并且 2/2+1=2.

right in the documentation

Classic HA queues work with a single node, but can potentially result in a split-brain if you don't use pause minority and manually recover the failed nodes.