【问题标题】:Why MassTransit `ServiceCollectionBusConfigurator` doesn't add `IConsumer` to `DI` by `AddConsumer`?为什么 MassTransit `ServiceCollectionBusConfigurator` 不通过`AddConsumer` 将`IConsumer` 添加到`DI`?
【发布时间】:2020-10-12 17:52:11
【问题描述】:

我正在开发 Blazor Server .NET 5 项目,该项目使用了一个不错的 MassTransit 7.0.5-develop2976 框架(顺便感谢 Chris!)。

我很好奇 为什么 MassTransit ServiceCollectionBusConfigurator 不向 DI 添加消费者,而我却这样做了 .AddConsumer<T>()。结果,我收到“无法解析消费者类型...”异常,如下所示。请参阅下面的解决方法。

例如,如果我通过它添加我的IConsumer<> 类型,类似的ServiceCollectionMediatorConfigurator 会这样做。

MassTransit 尝试解析我的使用者时遇到的异常示例(在我的情况下,它发生在触发定期计划作业时,但这并不重要)。

MassTransit.ConsumerException: Unable to resolve consumer type 'SomeMyConsumer'.
         at MassTransit.ExtensionsDependencyInjectionIntegration.ScopeProviders.DependencyInjectionConsumerScopeProvider.MassTransit.Scoping.IConsumerScopeProvider.GetScope[TConsumer,T](ConsumeContext`1 context)
         at MassTransit.Scoping.ScopeConsumerFactory`1.Send[TMessage](ConsumeContext`1 context, IPipe`1 next)
         at MassTransit.Pipeline.Filters.ConsumerMessageFilter`2.GreenPipes.IFilter<MassTransit.ConsumeContext<TMessage>>.Send(ConsumeContext`1 context, IPipe`1 next) 

问题:从架构的角度来看,这种行为的原因是什么?我错过了什么吗?

【问题讨论】:

  • 它绝对应该将您的消费者添加到容器中。如果您有可重现的案例,请告诉我。单元测试全部通过,所以必须注册。
  • 当计划的重复消息发送到作为此使用者的接收端点的总线队列(RabbitMQ 传输)时,会发生此异常。我非常忙于当前的编码工作,因此无法准备复制包。如果你愿意 - 我们可以快速共享屏幕通话 - 我会告诉你的。你会@ChrisPatterson 吗?
  • 不,我认为这不是 MassTransit 的问题,所以除非你能在失败的单元测试或其他什么情况下显示它,否则我将暂时放弃它。
  • 我今天实际上在 7.2.1 中看到了这一点 - 我将在 repo 中展开讨论。
  • Linked the discussion 供参考。

标签: dependency-injection masstransit


【解决方案1】:

作为一种解决方法,如果您像下面的示例那样明确地将您的消费者添加到IServiceCollection - 错误当然会消失:

services.AddScoped<SomeMyConsumer>();

...甚至也可以通过ServiceCollectionMediatorConfigurator 注册同一个消费者:

services.AddMediator(configurator =>
{
    configurator.AddConsumer<SomeMyConsumer>();
});

附:恕我直言,如果它们使用相同的方法签名,相似的抽象应该表现得相似,不是吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2019-09-26
    • 2014-05-19
    相关资源
    最近更新 更多