У меня есть вопрос о конфигурации MassTransit. Есть основное приложение и микросервис. Например, основное приложение отправляет микросервису (потребителю) команды на списание средств со счета.
Конфигурация в основном приложении:
var rabbitHost = new Uri("rabbitmq://localhost/app");
services.AddMassTransit(x => {
x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg => {
var host = cfg.Host(rabbitHost, hostConfigurator => {
hostConfigurator.Username("user");
hostConfigurator.Password("password");
});
}));
});
EndpointConvention.Map<WithdrawFunds>(new Uri(rabbitHost + "/test-queue"));
Конфигурация микросервиса:
var rabbitHost = new Uri("rabbitmq://localhost/app");
services.AddMassTransit(x => {
x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg => {
var host = cfg.Host(rabbitHost, hostConfigurator => {
hostConfigurator.Username("username");
hostConfigurator.Password("password");
});
cfg.ReceiveEndpoint(host, "test-queue", ep => {
ep.Consumer<WithdrawFundsConsumer>();
});
}));
});
Команда, выполняемая в главном приложении, например:
await _sendEndpointProvider.Send<WithdrawFunds>(new {
Amount = 100,
AccountId = "someId"
});
MassTransit создает очередь "test-queue", и если оба приложения работают, взаимодействие успешно выполняется. Но если я остановлю микросервис, то создается очередь «test-queue_skipped», в которую попадают пропущенные сообщения. Однако, если я запусту микросервис, он не будет получать пропущенные сообщения.
Как настроить MassTransit так, чтобы "_skipped" не создавался, а сообщения ожидали появления потребителя?