我最近建立了一个简单的公交服务来处理命令。如果我一次发送3条命令,则它会正确消耗前2条命令,然后将第3条放在*_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);
});
});
}));
});
答案 0 :(得分:1)
事实证明,另一个服务已使用我向其发送命令的地址注册了一个终结点,这导致命令被跳过。