Создание очереди Azure ServiceBus с помощью кода - PullRequest
0 голосов
/ 12 апреля 2019

Извините, я новичок в Azure.Я создал служебную шину и очередь через портал Azure, используя это учебное пособие .

Я могу писать и читать из очереди, все в порядке.Проблема в том, что для развертывания в следующей среде мне нужно либо обновить шаблон ARM, чтобы добавить новую очередь, либо создать очередь в коде.Я не могу создать очередь через портал в следующей среде.

Я выбрал последнее: проверьте, существует ли очередь, и создайте, как требуется, с помощью кода.У меня уже есть реализация для CloudQueueClient (в пространстве имен Microsoft.WindowsAzure.Storage.Queue).При этом используется объект CloudStorageAccount для создания CloudQueueClient, если он не существует.

Я надеялся, что это будет так просто, но, похоже, нет.Я изо всех сил пытаюсь найти способ создания QueueClint (в пространстве имен Microsoft.Azure.ServiceBus).Все, что у меня есть, - это строка подключения служебной шины и имя очереди, но, изучив документы Microsoft, мы поговорим о NamespaceManager и MessagingFactory (в другом пространстве имен), участвующих в процессе.

Может кто-нибудь указать мне, как этого добиться, и, что более важно, это правильный подход?Я буду использовать DI для создания экземпляра очереди, поэтому проверка / создание будет выполняться только один раз.

Решение требуется для очереди служебной шины, а не для очереди учетной записи хранения.Различия изложены здесь

Спасибо

Ответы [ 3 ]

1 голос
/ 13 апреля 2019

Для создания сущностей с новым клиентом Microsoft.Azure.ServiceBus вам нужно будет использовать ManagemnetClient, создав экземпляр и вызвав CreateQueueAsync().

0 голосов
/ 16 апреля 2019

Ответ Шона Фельдмана указал мне правильное направление. Основные необходимые пакеты / пространства имен nuget (.net core):

  • Microsoft.Azure.ServiceBus
  • Microsoft.Azure.ServiceBus.Management

    Вот мое решение:

    private readonly Lazy<Task<QueueClient>> asyncClient; private readonly QueueClient client;

    public MessageBusService(string connectionString, string queueName)
    {
        asyncClient = new Lazy<Task<QueueClient>>(async () =>
        {
            var managementClient = new ManagementClient(connectionString);
    
            var allQueues = await managementClient.GetQueuesAsync();
    
            var foundQueue = allQueues.Where(q => q.Path == queueName.ToLower()).SingleOrDefault();
    
            if (foundQueue == null)
            {
                await managementClient.CreateQueueAsync(queueName);//add queue desciption properties
            }
    
    
            return new QueueClient(connectionString, queueName);
        });
    
        client = asyncClient.Value.Result; 
    }
    

Не самая простая вещь, чтобы найти, но надеюсь, что это поможет кому-то.

0 голосов
/ 16 апреля 2019

Вы также можете создать очередь служебной шины, используя NamespaceManager,

QueueDescription _serviceBusQueue = new QueueDescription("QUEUENAME");   //assign the required properties to _serviceBusQueue 

NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString("CONNECTIONSTRING");

var queue = await namespaceManager.CreateQueueAsync(_azureQueue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...