MassTransit UseCluster 导致应用程序失败

MassTransit UseCluster causes application to fail

我们有一个 RabbitMQ 集群设置,我们正在使用 MassTransit 来管理消息类型、配置等。当我们关闭集群中的一个节点时,我们会直接在 运行 应用程序上得到如下异常,这意味着整个应用程序已关闭。

{
    "Depth": 0,
    "ClassName": "RabbitMQ.Client.Exceptions.BrokerUnreachableException",
    "Message": "None of the specified endpoints were reachable",
    "Source": "RabbitMQ.Client",
    "StackTraceString": "   at RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, String clientProvidedName)\n   at MassTransit.RabbitMqTransport.Integration.ConnectionContextFactory.CreateConnection(ISupervisor supervisor)",
    "RemoteStackTraceString": null,
    "RemoteStackIndex": 0,
    "HResult": -2146232800,
    "HelpURL": null
},

备份节点后问题消失。但是对于高可用性设置,我们希望应用程序在某些节点不可用时选择另一个节点。 我怀疑这是我们设置 MassTransit 的方式,它具有以下内容:

x.UsingRabbitMq((context, cfg) =>
   {
      cfg.Host("cluster", rmq.VHost, h =>
      {
         h.Username(rmq.Username);
         h.Password(rmq.Password);
         h.UseCluster(c =>
         {
             foreach (var node in rmq.Nodes)
             {
                 c.Node(node);
             }
         });
     });
     cfg.ConfigureEndpoints(context);
});

任何人以前遇到过这个问题并且知道公共交通中是否有任何配置我们可以用于应用程序“如果一个节点不可用则尝试下一个节点”?

它应该报告错误,但继续沿着列表向下连接到集群中可用的代理节点。如果您没有看到错误每隔几秒重复一次,说明它找到了一个可用节点并已连接。

如果您查看完整日志(而不仅仅是 ERROR 级别),您应该会看到对各个节点的连接尝试。

此问题与 MassTransit 无关,而是由于集群的配置方式所致。我在企业设置中工作,其中高可用性集群默认没有镜像策略。在这里阅读更多:https://www.rabbitmq.com/ha.html#what-is-mirroring