【发布时间】: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