Azure TopicClient线程是否安全?

Dou*_*oug 8 azure azureservicebus

我一直在处理来自TopicClient的大量Timeout,我认为它可能与对象的生命周期和处理有关.

我使用的是TopicClient类从Microsoft.ServiceBus.Messaging,并阅读本最佳实践指南状态

发送消息后,不应关闭消息传递工厂或队列,主题和订阅客户端,然后在发送下一条消息时重新创建它们.关闭消息传递工厂将删除与Service Bus服务的连接,并在重新创建工厂时建立新连接.

这让我感到困惑 - 这份文件没有具体提及,TopicClient但我认为它适用.也许这个假设不正确?

我可以将我的TopicClient存储在静态成员中以避免重新创建连接吗?有没有更好的方法来处理这个?我应该使用某种连接池机制吗?

Mik*_*eWo 9

文档指出 TopicClient的所有静态成员和实例成员都是线程安全的.

" 此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的.实例成员也保证是线程安全的."

我读了你所包含的引用,因为它特别包含了TopicClient,因为它说的是"队列,主题和订阅客户端".我把它读作QueueClient,TopicClient和SubscriptionClient.

对于消息传递子系统,我倾向于使用网关模式,该模式可用于处理使用消息传递子系统所必需的对象的生命周期.在您的情况下,Gateway对象将处理TopicClient或MessageSender/Receivers的生命周期.

我会问你是否看过更通用的MessageSenderMessageReceiver类?在发送时使用这些更通用的对象意味着执行发送的客户端代码不必知道它是否正在发送到主题或队列,它只能发送到该地址而不关心.