7

我们正在使用 Azure SDK 将消息发布到服务总线。在 Web API 调用中,我们为每个传入请求重复执行这些任务

MessagingFactory factory = MessagingFactory.CreateFromConnectionString(conStr);
factory.RetryPolicy = new RetryExponential(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2), 3);
var namespaceManager = NamespaceManager.CreateFromConnectionString(conStr);

TopicClient topicClient = factory.CreateTopicClient(topicName);

可以将 topicClient 转换为 Singleton 并跨多个线程重用吗?

4

1 回答 1

9

可以将 topicClient 转换为 Singleton 并跨多个线程重用吗?

是的,这是推荐的做法。从Best Practices for performance improvements using Service Bus Messaging

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

于 2017-08-09T15:57:54.667 回答