.net - MassTransit UseCluster 导致应用程序失败
问题描述
我们为 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 级别),您应该会看到到各个节点的连接尝试。
推荐阅读
- flutter - 在运行时渲染生成的小部件
- java - 使用多个条件的 Redis 缓存查询
- r - 固定效应模型负调整 R 平方
- sql - ORA-00934: “这里不允许组函数”
- lightningchart - 从闪电图中的仪表板查找图表位置
- visual-studio-code - 控制台从 fetch() 函数记录一个常量 response.text() 但我的代码被控制台记录为文本而不是我获取的内容。怎么修?
- python - 在python中将pdf文件转换为文本?我也使用过 pypdf2 和 pdfminer,它们无法正常工作
- python - 为什么我不能使用 python-binance 库下订单?
- javascript - 如何在 React 的类组件中传递数组对象?
- javascript - Ant 设计 - 折叠面板内的 Object.map 不起作用