我们有一个三节点RabbitMq集群,我们使用Rebus来生成和使用Rabbit的消息。我们处理的消息在数据安全方面至关重要,因此我们在RabbitMq中使用定额队列。
现在的问题是,即使我们有一个兔子集群,我们也有一个单点故障;当承载Rebus错误队列的节点变得不可用时,就会发生这种情况。似乎有两个选项,要么镜像RabbitMQ中的错误队列,要么将错误队列设置为仲裁队列。
我找到了一种将输入队列类型设置为quorum的方法:
Configure.With(activator)
.Logging(l => l.ColoredConsole())
.Transport(t =>
t.UseRabbitMq(
"connectionString", "MyQueue")
.InputQueueOptions(queueConfig =>
{
queueConfig.AddArgument("x-queue-type", "quorum");
}))
.Start();
Rebus中是否有方法使错误队列也成为仲裁队列?是否有充分的理由不将错误队列作为仲裁队列,而是使用镜像?
在Rabbit中手动创建错误队列作为仲裁队列不起作用,因为Rebus抱怨队列类型不是";经典";。
Rebus。RabbitMq7.2.0能够像上面的.InputQueueOptions(...)
一样自定义.DefaultQueueOptions(...)
——这意味着你的代码可以扩展到
Configure.With(activator)
.Logging(l => l.ColoredConsole())
.Transport(t =>
t.UseRabbitMq("connectionString", "MyQueue")
.InputQueueOptions(queueConfig => queueConfig.AddArgument("x-queue-type", "quorum"))
.DefaultQueueOptions(queueConfig => queueConfig.AddArgument("x-queue-type", "quorum"))
)
.Start();
从而实现你所追求的🙂