首页 > 解决方案 > MassTrant - 消费者 DI 生命周期和注册选项

问题描述

我知道建议将实现的实例IConsumer<T>注册为 Scoped 实例。

public class OrderCompleteEventHandler : IConsumer<IOrderCompleteEvent>
{
    private readonly IOrderService _orderService;

    public OrderCompleteEventHandler(IOrderService orderService)
    { 
        _orderService = orderService;
    }

    public Task Consume(ConsumeContext<IOrderCompleteEvent> context) => _orderService.DoSomething();
}

在上面的例子中,这是否意味着OrderCompleteEventHandler在它使用的每条消息之后都被释放,这会为所有注入的服务引入一个强制依赖?

在注册消费者的生命周期及其注入的服务时,我们还有哪些其他选择?

标签: c#.netrabbitmqmasstransitevent-bus

解决方案


消费者被封装在每个消息的生命周期范围内。这样做是为了确保消息可以以很高的并行性被使用。如果负载足够大。MassTransit 将使用多个消费者实例,因此整体吞吐量增加。

我不确定它与强制依赖有什么关系。Mark 的文章清楚地描述了采用瞬态作用域注册的依赖项的单例将有效地成为单例。由于消费者根据定义不是单身人士,因此他们在物理上无法创建强制依赖项。

消费者可以有其他依赖关系,这些依赖关系可能都是瞬态的,因此将按消息、作用域或单例实例化。


推荐阅读