c# - 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
在它使用的每条消息之后都被释放,这会为所有注入的服务引入一个强制依赖?
在注册消费者的生命周期及其注入的服务时,我们还有哪些其他选择?
解决方案
消费者被封装在每个消息的生命周期范围内。这样做是为了确保消息可以以很高的并行性被使用。如果负载足够大。MassTransit 将使用多个消费者实例,因此整体吞吐量增加。
我不确定它与强制依赖有什么关系。Mark 的文章清楚地描述了采用瞬态作用域注册的依赖项的单例将有效地成为单例。由于消费者根据定义不是单身人士,因此他们在物理上无法创建强制依赖项。
消费者可以有其他依赖关系,这些依赖关系可能都是瞬态的,因此将按消息、作用域或单例实例化。
推荐阅读
- r - 桑基图 R 中的百分比
- sql - 两个日期之间的记录 Oracle SQL
- javascript - 如果具有 X 类的对象也具有 Y 类,则执行
- python - 如何在 Python 中获取 `A^(-1/2)`?
- c++ - 使用指针检查分数是否在 0 到 100 之间
- iphone - 是否可以在 Safari 上获取用户的相机 (getUserMedia) 后立即播放音频文件?
- python - 识别重复对的 Python 列表
- doctrine-orm - 并在 LEFT JOIN 中加入 Doctrine
- python - 计算市场的下降趋势
- calculation - 如何在不使用汇总汇总的情况下计算 PDF 报告模板中的总计