клиентская библиотека Служебная шина Azure для Python версии 7.11.4

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

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

Клиентская библиотека служебной шины для Python используется для взаимодействия между приложениями и службами и реализации асинхронных шаблонов обмена сообщениями.

  • Создание пространств имен, очередей, разделов и подписок служебной шины и изменение их параметров.
  • Отправка и получение сообщений в каналах служебной шины.
  • Используйте блокировки сообщений, сеансы и функции недоставленных сообщений для реализации сложных шаблонов обмена сообщениями.

Исходный код | Пакет (PyPi) | Пакет (Conda) | Справочная документация по | APIДокументация по продукту | Образцы | Changelog

Примечание. Если вы используете версию 0.50 или более позднюю и хотите перейти на последнюю версию этого пакета, ознакомьтесь с нашим руководством по миграции, чтобы перейти с служебной шины версии 0.50 на служебную шину версии 7.

Начало работы

Установка пакета

Установите клиентную библиотеку Служебная шина Azure для Python с помощью pip:

pip install azure-servicebus

Предварительные требования:

Для использования этого пакета необходимо:

Если вам нужно пространство имен служебной шины Azure, его можно создать на портале Azure. Если вы не хотите использовать графический пользовательский интерфейс портала, можно использовать Azure CLI с помощью Cloud Shell или локального запуска Azure CLI, чтобы создать интерфейс командной строки с помощью следующей команды Azure CLI:

az servicebus namespace create --resource-group <resource-group-name> --name <servicebus-namespace-name> --location <servicebus-namespace-location>

Аутентификация клиента

Взаимодействие со служебной шиной начинается с экземпляра ServiceBusClient класса . Для создания экземпляра клиентского объекта требуется строка подключения с ключом SAS или пространство имен и один из ключей учетной записи. Найдите приведенные ниже примеры для демонстрации того, как выполнять проверку подлинности с помощью любого из этих подходов.

Создание клиента из строка подключения

  • Чтобы получить необходимые учетные данные, можно использовать фрагмент Azure CLI (отформатированный для оболочки Bash) в верхней части связанного примера, чтобы заполнить переменную среды строка подключения служебной шины (эти значения также можно найти на портале Azure, выполнив пошаговые инструкции по получению строка подключения служебной шины).

Создайте клиент с помощью библиотеки azure-identity:

  • Этот конструктор принимает полное пространство имен экземпляра служебной шины и учетные данные, реализующие протокол TokenCredential . Существуют реализации протокола, доступные TokenCredential в пакете azure-identity. Полное пространство имен имеет формат <yournamespace.servicebus.windows.net>.
  • Чтобы использовать типы учетных данных, предоставляемые azure-identity, установите пакет : pip install azure-identity
  • Кроме того, чтобы использовать асинхронный API, необходимо сначала установить асинхронный транспорт, например aiohttp: pip install aiohttp
  • При использовании Azure Active Directory субъекту должна быть назначена роль, которая разрешает доступ к служебной шине, например роль владельца данных Служебная шина Azure. Дополнительные сведения об использовании авторизации Azure Active Directory со служебной шиной см. в соответствующей документации.

Примечание. Клиент можно инициализировать без диспетчера контекста, но его необходимо закрыть вручную с помощью client.close(), чтобы не утечь ресурсы.

Основные понятия

После инициализации можно взаимодействовать с основными типами ресурсов в пространстве имен служебной ServiceBusClientшины, из которых может существовать несколько и где происходит фактическая передача сообщений, пространство имен часто выступает в качестве контейнера приложения:

  • Очередь: позволяет отправлять и получать сообщения. Часто используется для обмена данными типа "точка — точка".

  • Тема. В отличие от очередей, темы лучше подходят для сценариев публикации и подписки. Раздел можно отправить, но для использования из требуется подписка, из которой может быть несколько параллельных.

  • Подписка: механизм использования из раздела. Каждая подписка является независимой и получает копию каждого сообщения, отправленного в раздел. Правила и фильтры можно использовать для настройки сообщений, получаемых определенной подпиской.

Дополнительные сведения об этих ресурсах см. в статье Что такое Служебная шина Azure?.

Для взаимодействия с этими ресурсами необходимо ознакомиться со следующими понятиями пакета SDK:

  • ServiceBusClient. Это объект, который пользователь должен сначала инициализировать для подключения к пространству имен служебной шины. Для взаимодействия с очередью, разделом или подпиской необходимо создать отправителя или получателя из этого клиента.

  • ServiceBusSender. Для отправки сообщений в очередь или раздел следует использовать соответствующий get_queue_sender метод или get_topic_sender вне экземпляра ServiceBusClient , как показано здесь.

  • ServiceBusReceiver: для получения сообщений из очереди или подписки следует использовать соответствующий get_queue_receiver метод или get_subscription_receiver вне экземпляра ServiceBusClient , как показано здесь.

  • ServiceBusMessage. При отправке это тип, который будет создаваться для хранения полезных данных. При получении это место, где вы будете получать доступ к полезным данным.

Потокобезопасность

Мы не гарантируем, что ServiceBusClient, ServiceBusSender и ServiceBusReceiver являются потокобезопасны. Мы не рекомендуем повторно использовать эти экземпляры в потоках. Выполняющееся приложение может использовать эти классы потокобезопасным способом.

Примеры

В следующих разделах представлено несколько фрагментов кода, охватывающих некоторые из наиболее распространенных задач служебной шины, в том числе:

Для выполнения задач управления, таких как создание и удаление очередей, разделов и подписок, используйте библиотеку azure-mgmt-servicebus, доступную здесь.

Дополнительные примеры можно найти в каталоге примеров , демонстрирующие распространенные сценарии служебной шины, такие как отправка, получение, управление сеансом и обработка сообщений.

Отправка сообщений в очередь

ПРИМЕЧАНИЕ. См . справочную документацию здесь.

В этом примере отправляется одно сообщение и массив сообщений в очередь, которая, как предполагается, уже существует, созданной с помощью команд портал Azure или az.

from azure.servicebus import ServiceBusClient, ServiceBusMessage

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_sender(queue_name) as sender:
        # Sending a single message
        single_message = ServiceBusMessage("Single message")
        sender.send_messages(single_message)

        # Sending a list of messages
        messages = [ServiceBusMessage("First message"), ServiceBusMessage("Second message")]
        sender.send_messages(messages)

ПРИМЕЧАНИЕ: Сообщение может быть запланировано на отложенную доставку ServiceBusSender.schedule_messages() с помощью метода или путем указания ServiceBusMessage.scheduled_enqueue_time_utc перед вызовом ServiceBusSender.send_messages()

Дополнительные сведения о планировании и отмене расписания см. здесь.

Получение сообщений из очереди

Для получения из очереди можно выполнять нерегламентированное получение через receiver.receive_messages() или постоянно получать через самого получателя.

Получение сообщений из очереди с помощью итерации по ServiceBusReceiver

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    # max_wait_time specifies how long the receiver should wait with no incoming messages before stopping receipt.
    # Default is None; to receive forever.
    with client.get_queue_receiver(queue_name, max_wait_time=30) as receiver:
        for msg in receiver:  # ServiceBusReceiver instance is a generator.
            print(str(msg))
            # If it is desired to halt receiving early, one can break out of the loop here safely.

ПРИМЕЧАНИЕ: Любое сообщение, полученное с receive_mode=PEEK_LOCK помощью (это значение по умолчанию, с альтернативным RECEIVE_AND_DELETE немедленное удаление сообщения из очереди при получении), имеет блокировку, которая должна быть продлена с помощью receiver.renew_message_lock до истечения срока действия, если обработка займет больше времени, чем длительность блокировки. Чтобы помощник автоматически выполнял эту функцию в фоновом режиме, см. в статье AutoLockRenewer . Длительность блокировки задается в Azure в самой очереди или разделе.

Получение сообщений из очереди через ServiceBusReceiver.receive_messages()

ПРИМЕЧАНИЕ:ServiceBusReceiver.receive_messages() получает один или ограниченный список сообщений с помощью нерегламентированного вызова метода, а не получение бессрочно от генератора. Он всегда возвращает список.

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        received_message_array = receiver.receive_messages(max_wait_time=10)  # try to receive a single message within 10 seconds
        if received_message_array:
            print(str(received_message_array[0]))

    with client.get_queue_receiver(queue_name) as receiver:
        received_message_array = receiver.receive_messages(max_message_count=5, max_wait_time=10)  # try to receive maximum 5 messages in a batch within 10 seconds
        for message in received_message_array:
            print(str(message))

В этом примере max_message_count объявляет максимальное количество сообщений, которые необходимо получить до достижения max_wait_time, как указано в секундах.

ПРИМЕЧАНИЕ: Следует также отметить, что ServiceBusReceiver.peek_messages() тонко отличается от получения, так как он не блокирует просматриваемые сообщения, и, следовательно, они не могут быть урегулированы.

Отправка и получение сообщения из очереди с поддержкой сеанса

ПРИМЕЧАНИЕ. См . справочную документацию по отправке и получению сеансов.

Сеансы предоставляют семантику "первым в очереди" и семантику с одним получателем поверх очереди или подписки. Хотя фактический синтаксис получения одинаков, инициализация немного отличается.

from azure.servicebus import ServiceBusClient, ServiceBusMessage

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_SESSION_QUEUE_NAME']
session_id = os.environ['SERVICE_BUS_SESSION_ID']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_sender(queue_name) as sender:
        sender.send_messages(ServiceBusMessage("Session Enabled Message", session_id=session_id))

    # If session_id is null here, will receive from the first available session.
    with client.get_queue_receiver(queue_name, session_id=session_id) as receiver:
        for msg in receiver:
            print(str(msg))

ПРИМЕЧАНИЕ. Сообщения, полученные из сеанса, не нуждаются в продлении блокировки, как у приемника, не являющегося сеансом; Вместо этого управление блокировкой выполняется на уровне сеанса с блокировкой сеанса, которая может быть продлена с помощью receiver.session.renew_lock()

Работа с разделами и подписками

ПРИМЕЧАНИЕ. См . справочную документацию по темам и подпискам.

Разделы и подписки предоставляют альтернативу очередям для отправки и получения сообщений. Дополнительные сведения о том, чем они отличаются от очередей, см. здесь .

from azure.servicebus import ServiceBusClient, ServiceBusMessage

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
topic_name = os.environ['SERVICE_BUS_TOPIC_NAME']
subscription_name = os.environ['SERVICE_BUS_SUBSCRIPTION_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_topic_sender(topic_name) as sender:
        sender.send_messages(ServiceBusMessage("Data"))

    # If session_id is null here, will receive from the first available session.
    with client.get_subscription_receiver(topic_name, subscription_name) as receiver:
        for msg in receiver:
            print(str(msg))

Урегулировать сообщение после получения

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

ПРИМЕЧАНИЕ. Вы можете урегулировать ServiceBusReceivedMessage только объекты, полученные в ServiceBusReceiveMode.PEEK_LOCK режиме (это значение по умолчанию). ServiceBusReceiveMode.RECEIVE_AND_DELETE режим удаляет сообщение из очереди при получении. ServiceBusReceivedMessage Сообщения, возвращаемые из peek_messages() , не могут быть урегулированы, так как блокировка сообщений не принимается, как в вышеупомянутых методах получения.

Если сообщение имеет блокировку, как упоминалось выше, урегулирование завершится ошибкой, если срок действия блокировки сообщения истек. Если обработка займет больше времени, чем длительность блокировки, ее необходимо поддерживать до receiver.renew_message_lock истечения срока действия. Длительность блокировки задается в Azure в самой очереди или разделе. См AutoLockRenewer , чтобы помощник выполнил эту функцию в фоновом режиме автоматически.

Завершить

Объявляет обработку сообщения для успешного завершения, удаляя сообщение из очереди.

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        for msg in receiver:
            print(str(msg))
            receiver.complete_message(msg)

Abandon

На время прекратить обработку сообщения, немедленно верня его обратно в очередь, которую должен забрать другой (или тот же) получатель.

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        for msg in receiver:
            print(str(msg))
            receiver.abandon_message(msg)

DeadLetter

Перенесите сообщение из основной очереди в специальную очередь недоставленных сообщений, где к нему можно получить доступ с помощью ServiceBusClient.get_<queue|subscription>_receiver функции с параметром sub_queue=ServiceBusSubQueue.DEAD_LETTER и использовать из, как и любой другой получатель. (см. пример здесь)

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        for msg in receiver:
            print(str(msg))
            receiver.dead_letter_message(msg)

отложить;

Defer немного отличается от предыдущих методов расчета. Он предотвращает получение сообщения непосредственно из очереди, задавая его в сторону таким образом, чтобы оно было получено по порядковой номеру в вызове ServiceBusReceiver.receive_deferred_messages (см. пример здесь).

from azure.servicebus import ServiceBusClient

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        for msg in receiver:
            print(str(msg))
            receiver.defer_message(msg)

Автоматическое продление блокировки сообщений или сеансов

ПРИМЕЧАНИЕ. См . справочную документацию по автоматической блокировке и продлению.

AutoLockRenewer — это простой метод, гарантирующий, что сообщение или сеанс остаются заблокированными даже в течение длительного времени, если вызов receiver.renew_message_lock/receiver.session.renew_lock непрактичен или нежелательный. Внутренне это не более чем сокращение для создания параллельного сторожевого собака для продления блокировки, если срок действия объекта приближается к сроку действия. Его следует использовать следующим образом:

  • Автоматическое продление блокировки сообщений
from azure.servicebus import ServiceBusClient, AutoLockRenewer

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']

# Can also be called via "with AutoLockRenewer() as renewer" to automate closing.
renewer = AutoLockRenewer()
with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(queue_name) as receiver:
        for msg in receiver.receive_messages():
            renewer.register(receiver, msg, max_lock_renewal_duration=60)
            # Do your application logic here
            receiver.complete_message(msg)
renewer.close()
  • Автоматическое продление блокировки сеанса
from azure.servicebus import ServiceBusClient, AutoLockRenewer

import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
session_queue_name = os.environ['SERVICE_BUS_SESSION_QUEUE_NAME']
session_id = os.environ['SERVICE_BUS_SESSION_ID']

# Can also be called via "with AutoLockRenewer() as renewer" to automate closing.
renewer = AutoLockRenewer()
with ServiceBusClient.from_connection_string(connstr) as client:
    with client.get_queue_receiver(session_queue_name, session_id=session_id) as receiver:
        renewer.register(receiver, receiver.session, max_lock_renewal_duration=300) # Duration for how long to maintain the lock for, in seconds.

        for msg in receiver.receive_messages():
            # Do your application logic here
            receiver.complete_message(msg)
renewer.close()

Если по какой-либо причине автоматическое продление было прервано или завершилось сбоем, это можно наблюдать с помощью auto_renew_error свойства обновляемого объекта или путем передачи обратного вызова параметру on_lock_renew_failure при инициализации средства обновления. Он также будет проявляться при попытке выполнить действие (например, завершить сообщение) с указанным объектом.

Устранение неполадок

Ведение журнала

  • Включите azure.servicebus средство ведения журнала для сбора трассировок из библиотеки.
  • Включите uamqp средство ведения журнала для сбора трассировок из базовой библиотеки uAMQP.
  • Включите трассировку на уровне кадра AMQP, задав logging_enable=True при создании клиента.
  • В ряде случаев ведение журнала может быть слишком uamqp подробным. Чтобы отключить ненужное ведение журнала, добавьте следующий фрагмент кода в начало кода:
import logging

# The logging levels below may need to be changed based on the logging that you want to suppress.
uamqp_logger = logging.getLogger('uamqp')
uamqp_logger.setLevel(logging.ERROR)

# or even further fine-grained control, suppressing the warnings in uamqp.connection module
uamqp_connection_logger = logging.getLogger('uamqp.connection')
uamqp_connection_logger.setLevel(logging.ERROR)

Истекшее время ожидания

Существуют различные тайм-ауты, о которых пользователь должен знать в библиотеке.

  • 10-минутное закрытие канала на стороне службы. После открытия ссылка будет закрыта через 10 минут простоя, чтобы защитить службу от утечки ресурсов. Это в значительной степени должно быть прозрачным для пользователя, но если вы заметили, что повторное подключение происходит по истечении такой длительности, вот почему. Выполнение любых операций, включая операции управления, по ссылке увеличит это время ожидания.
  • max_wait_time: предоставляется при создании получателя или при вызове receive_messages(), время, после которого получение сообщений будет остановлено после отсутствия трафика. Это относится как к императивной receive_messages() функции, так и к длине, для которую будет выполняться получение в стиле генератора перед выходом, если сообщения отсутствуют. Передача None (по умолчанию) будет ждать до 10-минутного порога, если другие действия не будут выполнены.

ПРИМЕЧАНИЕ: Если обработка сообщения или сеанса достаточно длинна, чтобы вызвать превышение времени ожидания, в качестве альтернативы вызову receiver.renew_message_lock/receiver.session.renew_lock вручную можно использовать AutoLockRenewer функциональные возможности, описанные выше .

Общие исключения

API служебной шины создают следующие исключения в azure.servicebus.exceptions:

  • ServiceBusConnectionError: Произошла ошибка при подключении к службе. Это могло быть вызвано временной проблемой сети или службой. Рекомендуется повторить попытку.
  • ServiceBusAuthorizationError: Ошибка при авторизации подключения к службе. Это могло быть вызвано тем, что учетные данные не имеют права на выполнение операции. Рекомендуется проверка разрешения учетных данных.
  • ServiceBusAuthenticationError: Ошибка при проверке подлинности подключения к службе. Это могло быть вызвано неправильными учетными данными. Рекомендуется проверка учетные данные.
  • OperationTimeoutError: Это означает, что служба не ответила на операцию в течение ожидаемого времени. Это могло быть вызвано временной проблемой сети или службой. Служба может успешно выполнить запрос; состояние неизвестно. Рекомендуется попытаться проверить текущее состояние и при необходимости повторить попытку.
  • MessageSizeExceededError: Это означает, что содержимое сообщения больше размера кадра служебной шины. Это может произойти, если в пакете отправляется слишком много сообщений служебной шины или содержимое, передаваемое в текст , Message слишком велико. Рекомендуется уменьшить количество сообщений, отправляемых в пакете, или размер содержимого, передаваемого в один ServiceBusMessage.
  • MessageAlreadySettled: Это означает, что сообщение не урегулировать. Это может произойти при попытке урегулировать уже урегулированное сообщение.
  • MessageLockLostError: Срок действия блокировки сообщения истек, и она была снята обратно в очередь. Его необходимо будет получить снова, чтобы урегулировать его. Следует учитывать длительность блокировки сообщения и продлевать блокировку до истечения срока действия в случае длительного времени обработки. AutoLockRenewer может помочь при автоматическом продлении блокировки сообщения.
  • SessionLockLostError: Срок действия блокировки сеанса истек. Все полученные неурегулированые сообщения больше не могут быть урегулированы. При необходимости рекомендуется повторно подключиться к сеансу. Следует учитывать длительность блокировки сеанса и продлевать блокировку до истечения срока действия в случае длительного времени обработки. AutoLockRenewer может помочь в автоматическом продлении блокировки сеанса.
  • MessageNotFoundError: Попытайтесь получить сообщение с определенным порядковый номер. Это сообщение не найдено. Убедитесь, что сообщение уже не было получено. Проверьте очередь недоставленных сообщений, чтобы увидеть, не находится ли в ней сообщение.
  • MessagingEntityNotFoundError: Сущность, связанная с операцией, не существует или удалена. Убедитесь, что сущность существует.
  • MessagingEntityDisabledError: Запрос операции среды выполнения для отключенной сущности. Активируйте сущность.
  • ServiceBusQuotaExceededError: Сущность обмена сообщениями достигла максимально допустимого размера или превышено максимальное количество подключений к пространству имен. Создайте в сущности пространство, получая сообщения из сущности или ее подочередей.
  • ServiceBusServerBusyError: В настоящее время служба не может обработать запрос. Клиент может некоторое время подождать, после чего следует повторить операцию.
  • ServiceBusCommunicationError: Клиент не может установить подключение к служебной шине. Убедитесь, что имя узла указано правильно и узел доступен. Если код выполняется в среде с брандмауэром или прокси-сервером, убедитесь, что трафик к домену/IP-адресу или порту служебной шины не заблокирован.
  • SessionCannotBeLockedError: Попытайтесь подключиться к сеансу с определенным идентификатором сеанса, но сеанс в настоящее время заблокирован другим клиентом. Убедитесь, что сеанс разблокирован другими клиентами.
  • AutoLockRenewFailed: Попытка обновить блокировку сообщения или сеанса в фоновом режиме завершилась сбоем. Это может произойти, когда приемник, используемый , AutoLockRenewer закрыт или истек срок действия блокировки возобновляемых источников. Рекомендуется повторно зарегистрировать возобновляемое сообщение или сеанс, получив сообщение или снова подключився к сущности сеанса.
  • AutoLockRenewTimeout: Истекло время, выделенное на продление сообщения или блокировки сеанса. Вы можете повторно зарегистрировать объект, который требует автоматической блокировки, или продлить время ожидания заранее.
  • ServiceBusError: Все остальные ошибки, связанные со служебной шиной. Это корневой класс ошибок всех описанных выше ошибок.

Подробные описания распространенных типов исключений см. в справочной документации по исключениям .

Дальнейшие действия

Больше примеров кода

Дополнительные примеры см. в каталоге примеров , демонстрирующие распространенные сценарии служебной шины, такие как отправка, получение, управление сеансами и обработка сообщений.

Дополнительная документация

Более подробную документацию по службе служебной шины см. в документации по служебной шине по docs.microsoft.com.

Возможности управления и документация

Пользователям, которые хотят выполнять операции управления в ServiceBus (создание очереди, раздела и т. д., изменение правил фильтрации, перечисление сущностей), см. документацию по API azure-mgmt-servicebus . Примеры использования terse также можно найти здесь .

Поддержка чистого транспорта и обратной совместимости PYTHON AMQP

Клиентская библиотека Служебная шина Azure теперь основана на чистой реализации AMQP python. uAMQP удалена как необходимая зависимость.

Чтобы использовать uAMQP в качестве базового транспорта, выполните следующие действия.

  1. Установка uamqp с помощью pip.
$ pip install uamqp
  1. Передача uamqp_transport=True во время создания клиента.
from azure.servicebus import ServiceBusClient
connection_str = '<< CONNECTION STRING FOR THE SERVICE BUS NAMESPACE >>'
queue_name = '<< NAME OF THE QUEUE >>'
client = ServiceBusClient.from_connection_string(
    connection_str, uamqp_transport=True
)

Примечание. Атрибут message вServiceBusMessageBatch//ServiceBusMessageServiceBusReceivedMessage , который ранее предоставлял uamqp.Message, был нерекомендуем. Для упрощения перехода были введены объекты Legacy, возвращаемые атрибутом message .

Создание колесика uAMQP из источника

azure-servicebus зависит от uAMQP для реализации протокола AMQP. Диски uAMQP предоставляются для большинства основных операционных систем и устанавливаются автоматически при установке azure-servicebus. Если uAMQP предназначено для использования в качестве базовой реализации протокола AMQP для azure-servicebus, для большинства основных операционных систем можно найти колеса uAMQP.

Если вы работаете на платформе, для которой не предоставляются колеса uAMQP, выполните инструкции. Если вы планируете использовать uAMQP и работаете на платформе, для которой не предоставлены колеса uAMQP, следуйте указаниям по установке uAMQP для установки из источника.

Участие

На этом проекте приветствуются публикации и предложения. Для участия в большинстве процессов по разработке документации необходимо принять лицензионное соглашение участника (CLA), в котором указывается, что вы предоставляете нам права на использование ваших публикаций. Для получения подробных сведений посетите веб-страницу https://cla.microsoft.com.

При отправке запроса на включение внесенных изменений CLA-бот автоматически определит необходимость предоставления соглашения CLA и соответствующего оформления запроса на включение внесенных изменений (например, добавление метки, комментария). Просто следуйте инструкциям бота. Будет достаточно выполнить их один раз для всех репозиториев, поддерживающих соглашение CLA.

В рамках этого проекта действуют правила поведения в отношении продуктов с открытым исходным кодом Майкрософт. Дополнительные сведения см. в разделе часто задаваемых вопросов о правилах поведения или обратитесь к opencode@microsoft.com с любыми дополнительными вопросами или комментариями.