AzureServiceBusClientSingleton.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using Microsoft.Azure.ServiceBus;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. namespace TEAMModelOS.SDK.Module.AzureServiceBus
  6. {
  7. public class AzureServiceBusClientSingleton
  8. {
  9. private ServiceBusModel ServiceBusModel;
  10. public static AzureServiceBusOptions azureServiceBusOptions;
  11. private AzureServiceBusClientSingleton() { }
  12. public ServiceBusModel GetServiceBusClient()
  13. {
  14. if (ServiceBusModel != null)
  15. {
  16. return ServiceBusModel;
  17. }
  18. else
  19. {
  20. getInstance(azureServiceBusOptions);
  21. return ServiceBusModel;
  22. }
  23. }
  24. public static AzureServiceBusClientSingleton getInstance(AzureServiceBusOptions _azureServiceBusOptions)
  25. {
  26. azureServiceBusOptions= _azureServiceBusOptions;
  27. return SingletonInstance.instance;
  28. }
  29. private static class SingletonInstance
  30. {
  31. public static AzureServiceBusClientSingleton instance = new AzureServiceBusClientSingleton()
  32. {
  33. ServiceBusModel = new ServiceBusModel { topClients = GetTopClients(),subClients=GetSubClients() }
  34. };
  35. }
  36. private static Dictionary<string, TopClient> GetTopClients() {
  37. Dictionary<string, TopClient> topClients = new Dictionary<string, TopClient>();
  38. string ConnectionString = azureServiceBusOptions.ConnectionString;
  39. azureServiceBusOptions.Topics.ForEach(x=> { topClients.TryAdd(x.Name, new TopClient { topicClient = new TopicClient(ConnectionString, x.Name) }); });
  40. return topClients;
  41. }
  42. private static Dictionary<string, SubClient> GetSubClients()
  43. {
  44. Dictionary<string, SubClient> subClients = new Dictionary<string, SubClient>();
  45. string ConnectionString = azureServiceBusOptions.ConnectionString;
  46. azureServiceBusOptions.Topics.ForEach(x => { x.Subscribe.ForEach(y => { subClients.TryAdd(y, new SubClient { topName = x.Name, subscriptionClient = new SubscriptionClient(ConnectionString, x.Name, y) }); }); });
  47. return subClients;
  48. }
  49. }
  50. public class ServiceBusModel {
  51. public Dictionary<string, TopClient> topClients { get; set; } = new Dictionary<string, TopClient>();
  52. public Dictionary<string, SubClient> subClients { get; set; } = new Dictionary<string, SubClient>();
  53. }
  54. public class TopClient {
  55. public ITopicClient topicClient { get; set; }
  56. }
  57. public class SubClient
  58. {
  59. public string topName { get; set; }
  60. public ISubscriptionClient subscriptionClient { get; set; }
  61. }
  62. }