【问题标题】:MassTransit UseCluster causes application to failMassTransit UseCluster 导致应用程序失败
【发布时间】:2021-08-12 07:37:37
【问题描述】:

我们为 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);
});

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

【问题讨论】:

    标签: .net rabbitmq masstransit


    【解决方案1】:

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

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

    【讨论】:

    • 感谢克里斯的快速反应。我们按照建议查看了日志,发现这是我们的 RabbitMQ 集群的镜像配置问题。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-04-30
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 2021-08-15
      • 1970-01-01
      相关资源
      最近更新 更多