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

Я использую 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 для отправки сообщения по теме?


person Dave    schedule 12.10.2020    source источник


Ответы (1)


Чтобы ответить напрямую, ServiceBusManagementClient не означает отправку сообщения в тему.

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

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

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

Чтобы было ясно, нельзя использовать ServiceBusManagementClient для отправки сообщений, а только для управления. ServiceBusClient - это решение, как показано в этот образец.

person Kibrantn    schedule 12.10.2020
comment
Проблема, с которой я сталкиваюсь, заключается в том, что ServiceBusManagementClient создается с использованием объекта ServicePrincipalCredentials и идентификатора подписки. Я не понимаю, как использовать эту информацию для создания экземпляра ServiceBusClient. Не могли бы вы дать какие-нибудь рекомендации по этому поводу? - person Dave; 13.10.2020
comment
Конечно, и приносим свои извинения за медленное отслеживание, мы упустили несколько предстоящих выпусков: ServiceBusClient версия 0.5* не сможет использовать эти учетные данные. Тем не менее, предстоящий выпуск GA, 7.0.0, который в настоящее время находится на стадии предварительного просмотра, будет поддерживать аутентификацию на основе азур-идентификаторов (b8 выйдет на следующей неделе, а финальный выпуск, надеюсь, вскоре после этого), см. этот образец. - person Kibrantn; 30.10.2020