【问题标题】:Instantiating multiple instance of Microsoft.Azure.ServiceBus.QueueClient in .NET Core在 .NET Core 中实例化多个 Microsoft.Azure.ServiceBus.QueueClient 实例
【发布时间】:2019-11-04 04:16:17
【问题描述】:

我正在寻找使用依赖注入在 .Net Core 中创建多个 Microsoft.Azure.ServiceBus.QueueClient 实例的最佳实践。例如,实例应该是单例的吗?我找不到任何官方指导。

目前我正在将一个实例解析为单例,但一项新要求是我必须使用相同的连接字符串为不同的队列实例化多个 QueueClient 实例。

关注的是连接池和生命周期,以及如何/应该如何管理。我发现 .NET Framework 中提到了 MessagingFactory,但没有太多关于 .NET Core 中的等价物(如果有)的信息。

【问题讨论】:

    标签: .net-core azureservicebus .net-core-2.2


    【解决方案1】:

    .NET Framework 版本的客户端使用MessagingFactoring 作为连接池的机制。使用同一个工厂创建的每个客户端都将重用同一个连接对象。

    使用 .NET Standard 客户端不再是这种情况。您可以选择是否要共享连接。如果您使用连接 string 构建所有队列客户端,则每次都会创建新连接。它既昂贵又需要资源。如果您使用相同的 ServiceBusConnection 对象构建队列客户端,那么您将重复使用相同的连接,并且不会支付每次重新建立连接的成本。

    请注意,无论何时重用对象,都需要验证底层连接是否仍处于打开状态。如果不是,您将需要通过指定连接字符串或使用您拥有的连接字符串实例化一个新的连接对象来创建一个新的连接对象。

    【讨论】:

    • 所以基本上开箱即用的连接池不再可用,必须从头开始实现?我不明白为什么微软取消了工厂。有时,在处理不同的抽象层和接口时,重用 ServiceBusConnection 对象并不是那么直接。手动灵活性很好,但完全取消工厂似乎没有多大意义。如果我在推理中遗漏了什么,请纠正我。
    • 正确,没有 OOTB 池。你可以提出feature request。就个人而言,我喜欢拥有控制权的想法,并且没有混淆 MessagingFactory 本质上充当 ServiceBusConnection。 ?‍♀️
    猜你喜欢
    • 2018-06-24
    • 2018-02-11
    • 2016-01-05
    • 2018-09-25
    • 2020-07-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多