通过 MassTransit 在 RabbitMQ 中按发件人创建仲裁队列

Creating quorum queues by Sender in RabbitMQ by MassTransit

我使用 MassTransit 和 RabbitMQ quorum queue 进行应用程序集成。我使用

发送消息
var endpoint = await _bus.GetSendEndpoint(new Uri("exchange:TestCommand"));
await endpoint.Send(command1, stoppingToken);

如果“接收方应用程序”从未启动,则不会创建队列并且所有已发送的消息都将丢失。

如果我使用前缀 queue 发送:

var endpoint = await _bus.GetSendEndpoint(new Uri("queue:TestCommand"));
await endpoint.Send(command, stoppingToken);

经典队列 将被创建(不是仲裁)。而且我以后不能更改队列类型。

我不想考虑“接收方应用程序”的启动时刻,也不想丢失已发送的消息。我如何使用 MassTransit 通过发送方应用程序创建 RabbitMQ 仲裁队列?

一般指导很简单,不要将生产者与消费者耦合。

您可以先启动接收器,以便它正确配置队列(包括仲裁设置)。

或者您可以设置 Mandatory 标志(指定 RabbitMQ),以便在消息未传递到队列时 Send 抛出异常,并且 return 发送到交换器。