首页 > 解决方案 > 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);
                    });
                });
            }));
        });

标签: rabbitmqmasstransit

解决方案


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


推荐阅读