相关疑难解决方法(0)

服务总线-单例连接类?

我试图找出从Web-API使用服务总线的最佳实践是什么。

我已经读到重新创建QueueClient,SubscriptionClient等对象是错误的方法,因此我需要重用工厂和客户端。

服务总线客户端对象(例如Microsoft.ServiceBus.Messaging.QueueClient或Microsoft.ServiceBus.Messaging.MessageSender)是通过MessagingFactory对象创建的,该对象还提供内部连接管理。发送消息后,请勿关闭消息传递工厂或将队列,主题和订阅客户端关闭,然后在发送下一条消息时重新创建它们。关闭消息传递工厂会删除与服务总线服务的连接,并且在重新创建工厂时会建立新的连接。建立连接是一项昂贵的操作,可以通过将同一工厂和客户端对象重新用于多个操作来避免。

参考

我需要实现一个特殊的类,该类将保持与服务总线的连接,我在考虑一个Singleton类,该类将保留特定的操作(像这样EnqueueJobToArchiveQueue(Job job)的函数,构造函数将初始化QueueClient,MessageFactory等,然后由“特定的操作功能”。

我的问题是我需要关闭对象(QueueClient.Close()),什么时候需要关闭对象?

到目前为止,这是我的课程:

 public class ServiceBusHelper
{
    private static readonly ServiceBusHelper instance = new ServiceBusHelper();

    private static MessagingFactory msgFactory;

    private static NamespaceManager namespaceManager;

    private const string jobQueueName = "job";

    private const string responseTopicName = "jobResult";

    private const string archiveQueueName = "jobArchive";

    private static QueueClient archiveQueue;

    private static QueueClient jobQueue;

    private static TopicClient responseTopic;

    private ServiceBusHelper()
    {

    }

     static ServiceBusHelper()
    {

          msgFactory = MessagingFactory.CreateFromConnectionString(ConfigurationManager.AppSettings["ServiceBusCS"]);
          namespaceManager = NamespaceManager.CreateFromConnectionString(ConfigurationManager.AppSettings["ServiceBusCS"]);

          if (!namespaceManager.QueueExists(jobQueueName))
          {
              namespaceManager.CreateQueue(jobQueueName);
          } …
Run Code Online (Sandbox Code Playgroud)

c# azure azureservicebus azure-servicebus-queues

5
推荐指数
1
解决办法
2878
查看次数