【问题标题】:Why is QueueClient not disposable为什么 QueueClient 不是一次性的
【发布时间】:2014-07-23 11:44:37
【问题描述】:

为什么 QueueClient 不是一次性的?它有一个 Close 方法。我总是要打电话给close吗?文档说:

向服务总线发送清理消息,以指示实体使用完成。 (继承自 ClientEntity。)

如果我只使用客户端发送,我需要这个吗?

【问题讨论】:

  • 如果你想让这更简单,你可以创建自己的IQueueClient接口,确实实现IDisposable,然后将它实现为Service Bus的@的适配器987654325@。见Adapter pattern
  • 这很奇怪。在链接到 msdn.microsoft.com/en-us/library/hh851740.aspx 之前,这里有一条评论,这有助于我理解它们实际上是线程安全的,不应该被丢弃。

标签: c# servicebus


【解决方案1】:

因为

重用工厂和客户端 服务总线客户端对象(例如 QueueClient 或 MessageSender)是通过 MessagingFactory 对象创建的,该对象还提供连接的内部管理。建议您发送消息后不要关闭消息工厂或队列、主题和订阅客户端,然后在发送下一条消息时重新创建它们。关闭消息传递工厂会删除与服务总线服务的连接,并在重新创建工厂时建立新的连接。建立连接是一项昂贵的操作,您可以通过为多个操作重用相同的工厂和客户端对象来避免这种操作。您可以安全地将这些客户端对象用于并发异步操作和来自多个线程。

证明链接:https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-performance-improvements#reusing-factories-and-clients

【讨论】:

  • 同一个链接说:“服务总线客户端对象,例如 IQueueClient 或 IMessageSender 的实现,应该注册为单例(或实例化一次并共享)依赖注入。” IQueueClient 不应该实现 IDisposable 以使依赖注入容器能够正确处理它吗?
猜你喜欢
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多