【问题标题】:Mass Transit skips commands under light loadMass Transit 在轻负载下跳过命令
【发布时间】:2019-03-16 21:08:12
【问题描述】:

我最近构建了一个简单的 Mass Transit 服务来处理命令。如果我一次发送 3 个命令,它会正确消耗前 2 个命令,然后将第三个命令放在 *_skipped 队列中。我的理解是,如果端点上没有消费者可以处理它,那么该命令应该只放在跳过的队列中,所以我很困惑为什么应该跳过第三个命令。我可以做些什么来进一步调查并解决问题?

这是消费者的配置

    services.AddMassTransit(x =>
        {
            x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                var host = cfg.Host(_settings.RabbitMqConnectionString, "/", h => { });

                cfg.UseInMemoryScheduler();
                //cfg.UseMessageScheduler(new Uri("rabbitmq://localhost/quartz"));
                cfg.UseExtensionsLogging(provider.GetRequiredService<ILoggerFactory>());

                cfg.ReceiveEndpoint(host, CurriculumQueryHelper.EndpointName, e =>
                {
                    e.Consumer<CurriculumQueryHelper>(provider);
                });

                cfg.ReceiveEndpoint(host, CurriculumCommandHelper.EndpointName, e =>
                {
                    e.Consumer<CurriculumCommandHelper>(provider, config =>
                    {
                        //config.UseConcurrencyLimit(1);
                    });
                });
            }));
        });

【问题讨论】:

  • 第三条消息,_skipped 队列中的消息与前两条消息的类型相同吗?如果查看 JSON,MessageType 值是否相同?
  • 是的。它们是同一类型

标签: rabbitmq masstransit


【解决方案1】:

事实证明,另一个服务注册了一个与我发送命令的地址相同的端点,这导致命令被跳过。

【讨论】:

  • 当然有,当_skipped 消息出现时几乎总是这样。很高兴你知道了!
猜你喜欢
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
相关资源
最近更新 更多