首页 > 解决方案 > RabbitMQ MassTransit 集群问题

问题描述

环境:RabbitMQ 3.8.14, Erlang 23.2, Masstrnasit 7.2.2, Asp.net core 5.0 Windows server 2016.
我有两个具有名称的节点rabbit@rabbitOnerabbit@rabbitTwo不同的服务器。
根据 RabbitMQ官方文档,我为两个节点设置了相同的 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节点。我已经看到除了我的 Quorum 队列之外down staterabbit@rabbitOne节点和他的所有队列,它们位于running state. 但是在这种状态下(rabbit@rabbitOne)MassTransit Bus 无法连接到 RabbitMQ。我得到了例外:“没有一个指定的端点是可达的”。. 我知道什么意思。但我假设这个提示:尽管节点已关闭,但具有仲裁队列的节点必须可用!。 想念我对 RabbitMQ 集群有什么了解吗?我想,我必须在 MassTransit 配置中为 Host 设置另一个值?
在此处输入图像描述

connection faild: "rabbitmq://myMlusterName"rabbit@rabbitOnerabbit@rabbitTwo

我必须在 RabbitMQ 配置文件中为发现节点设置一个东西吗?或另一个错过理解?

标签: asp.net-corerabbitmqmasstransit

解决方案


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

在文档中是正确的

经典 HA 队列适用于单个节点,但如果您不使用暂停少数并手动恢复故障节点,则可能会导致脑裂。


推荐阅读