如何配置MassTransit,以便队列中的命令等待使用者?

时间:2019-10-09 17:45:05

标签: asp.net-core rabbitmq masstransit

我对MassTransit配置有疑问。 有一个主应用程序和微服务。 例如,Main应用程序向微服务(消费者)发送命令以从帐户中注销资金。

主应用程序中的配置:

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_skipped”队列,丢失的消息将落入其中。但是,如果我启动微服务,它将不会收到错过的消息。

如何配置MassTransit,以便不创建“ _skipped”,并且消息正在等待使用者显示?

0 个答案:

没有答案