在向 Azure 主题发送消息之前重新创建主题客户端是否是一个好习惯

Pra*_*rya 2 azure azureservicebus brokeredmessage

我正在使用 Microsoft.Azure.ServiceBus, Version=2.0.0.0 程序集连接到 Azure 主题。代码如下

public void SendMessage(Message brokeredMessage) 
{
    var topicClient = new TopicClient(_configuration.ConnectionString, topicName, _defaultRetryPolicy);
    await topicClient.SendAsync(brokeredMessage);
    await topicClient.CloseAsync();
}
Run Code Online (Sandbox Code Playgroud)

我想知道每次需要向主题发送消息时创建主题客户端是否是一个好习惯,还是应该在应用程序启动时创建主题客户端并在每次需要发送消息时继续使用相同的客户端?

我需要考虑任何性能或可扩展性问题吗?

Gau*_*tri 5

来自Azure Service Bus Best Practices帖子:

重用工厂和客户

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

基于此,您应该重用该Topic Client对象。