Как мне использовать ServiceBusManagementClient с Azure Python SDK для отправки сообщения по теме?

#python-3.x #azure #azureservicebus #azure-servicebus-topics

#python-3.x #azure #azureservicebus #azure-servicebus-темы

Вопрос:

Я использую Python 3.8 с azure-mgmt-servicebus = v. 1.0.0. Используя ServiceBusManagementClient, я могу создать тему и подписку на своей служебной шине, используя

   from azure.mgmt.servicebus import ServiceBusManagementClient
...
        credential = ServicePrincipalCredentials(self._client_id, self._client_secret, tenant=self._tenant)
        sb_client = ServiceBusManagementClient(credential, self._subscription)
    sb_client.topics.create_or_update(resource_group_name, namespace_name, topic_name, parameters={})
        sb_client.subscriptions.create_or_update(resource_group_name, namespace_name, topic_name, SB_SUBSCRIPTION_NAME, parameters={})
  

Однако у меня более сложное время для отправки сообщения по этой теме. Я попробовал это

     credential = ServicePrincipalCredentials(self._client_id, self._client_secret, tenant=self._tenant)
sb_client = ServiceBusManagementClient(credential, self._subscription)
topic_client = sb_client.get_topic(topic_name)
              topic_client.send(msg)
  

Но я получаю сообщение об ошибке «Экземпляр ServiceBusManagementClient не имеет члена ‘get_topic'». Как мне использовать ServiceBusManagementClient для отправки сообщения по теме?

Ответ №1:

Прямой ответ ServiceBusManagementClient не предназначен для отправки сообщения в тему.

Но не бойтесь! Проблема здесь в том, что вы используете функциональность двух разных клиентов ServiceBus, которые не существуют в одном пакете, и это можно решить.

  1. ServiceBusManagementClient является частью azure-mgmt-servicebus пакета и позволяет создавать, администрировать, управлять и т. Д. (здесь create_or_update и появляются друзья)

  2. ServiceBusClient является частью azure-servicebus пакета и предоставляет функции отправки / получения, которые, как вам кажется, нужны после использования get_topic и send . (это синтаксис из версии 0.5 *)

Итак, чтобы было ясно, можно было бы не использовать ServiceBusManagementClient для отправки сообщений, а только для управления. ServiceBusClient это решение, как показано в этом примере.

Комментарии:

1. Проблема, с которой я столкнулся, заключается в том, что экземпляр ServiceBusManagementClient создается с использованием объекта ServicePrincipalCredentials и идентификатора подписки. Я не понимаю, как использовать эту информацию для создания экземпляра ServiceBusClient. Не могли бы вы дать некоторые рекомендации по этой части?

2. Конечно, и приносим извинения за медленное отслеживание, мы ожидали появления некоторых выпусков: ServiceBusClient версия 0.5* не сможет использовать эти учетные данные. Однако предстоящий выпуск GA 7.0.0 , который в настоящее время находится в предварительном просмотре, будет поддерживать аутентификацию на основе Azure-identity ( b8 выйдет на следующей неделе, и, надеюсь, финальный выпуск будет вскоре выпущен), см. Этот пример .