通过 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 发送到交换器。
我使用 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 发送到交换器。