Rebus 可以配置为在 RabbitMQ 中将错误队列类型设置为仲裁吗?

Can Rebus be configured to set error queue type to quorum in RabbitMQ?

我们有一个三节点 RabbitMq 集群,我们正在使用 Rebus 来生成和使用来自 Rabbit 的消息。我们处理的消息在数据安全方面至关重要,因此我们在 RabbitMq 中使用仲裁队列。

现在的问题是,即使我们有一个 rabbit 集群,我们也会有单点故障;它发生在托管 Rebus 错误队列的节点变得不可用时。似乎有两种选择,要么在 RabbitMQ 中镜像错误队列,要么使错误队列成为仲裁队列。

我找到了一种将输入队列类型设置为仲裁的方法:

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.RabbitMq 7.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();

从而实现你想要的