【发布时间】:2021-09-29 11:06:48
【问题描述】:
环境:RabbitMQ 3.8.14、Erlang 23.2、Masstrnasit 7.2.2、Asp.net core 5.0Windows server 2016。
我在不同的服务器中有两个名为 rabbit@rabbitOne 和 rabbit@rabbitTwo 的节点。
根据 RabbitMQ official documents,我为两个节点设置了相同的 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 节点。我已经看到down state 的rabbit@rabbitOne 节点和他的所有队列,除了我的Quorum 队列,它们都在running state 中。
但在此状态下 (rabbit@rabbitOne) MassTransit Bus 无法连接到 RabbitMQ。我得到了例外:“没有一个指定的端点是可达的”。 connection faild: "rabbitmq://myMlusterName"。
我知道什么意思。但我假设这个提示:尽管rabbit@rabbitOne 节点已关闭,但具有仲裁队列的rabbit@rabbitTwo 节点必须可用!。
想念我对 RabbitMQ 集群有什么了解吗?
我想,我必须在 MassTransit 配置中为 Host 设置另一个值?
我必须在 RabbitMQ 配置文件中为发现节点设置一个东西吗?
还是其他理解失误?
【问题讨论】:
标签: asp.net-core rabbitmq masstransit