Sdílet prostřednictvím


Azure Service Bus klientské knihovny pro Python – verze 7.11.4

Azure Service Bus je vysoce výkonná cloudová služba zasílání zpráv, která poskytuje komunikaci v reálném čase a odolnost proti chybám mezi distribuovanými odesílateli a příjemci.

Service Bus poskytuje několik mechanismů pro asynchronní a vysoce spolehlivou komunikaci, jako je strukturované zasílání zpráv typu first-in-first-out, možnosti publikování a odběru a možnost snadného škálování podle rostoucích potřeb.

Ke komunikaci mezi aplikacemi a službami a implementaci asynchronních vzorů zasílání zpráv použijte klientskou knihovnu Service Bus pro Python.

  • Vytvořte obory názvů, fronty, témata a odběry služby Service Bus a upravte jejich nastavení.
  • Odesílat a přijímat zprávy v rámci kanálů Service Bus.
  • Využijte funkce zámků zpráv, relací a nedoručených zpráv k implementaci složitých vzorců zasílání zpráv.

Zdrojový kód | Balíček (PyPi) | Balíček (Conda) | Referenční dokumentace k | rozhraní APIDokumentace k | produktuVzorky | Changelog

POZNÁMKA: Pokud používáte verzi 0.50 nebo nižší a chcete migrovat na nejnovější verzi tohoto balíčku, projděte si našeho průvodce migrací a přejděte ze služby Service Bus verze 0.50 na Service Bus verze 7.

Začínáme

Instalace balíčku

Nainstalujte klientskou knihovnu Azure Service Bus pro Python pomocí příkazu pip:

pip install azure-servicebus

Požadavky:

Pokud chcete tento balíček použít, musíte mít:

Pokud potřebujete obor názvů služby Azure Service Bus, můžete ho vytvořit prostřednictvím webu Azure Portal. Pokud nechcete používat grafické uživatelské rozhraní portálu, můžete použít Azure CLI prostřednictvím Cloud Shell nebo místně spustit Azure CLI a vytvořit ho pomocí tohoto příkazu Azure CLI:

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

Ověření klienta

Interakce se službou Service Bus začíná instancí ServiceBusClient třídy . K vytvoření instance objektu klienta potřebujete připojovací řetězec s klíčem SAS nebo obor názvů a jeden z klíčů účtu. Níže najdete ukázky, na které najdete ukázku ověřování pomocí obou přístupů.

Vytvoření klienta z připojovací řetězec

Vytvořte klienta pomocí knihovny azure-identity:

  • Tento konstruktor přebírá plně kvalifikovaný obor názvů vaší instance služby Service Bus a přihlašovací údaje, které implementují protokol TokenCredential . V balíčku azure-identity jsou k dispozici implementace TokenCredential protokolu. Plně kvalifikovaný obor názvů je ve formátu <yournamespace.servicebus.windows.net>.
  • Pokud chcete použít typy přihlašovacích údajů, které azure-identityposkytuje , nainstalujte balíček : pip install azure-identity
  • Pokud chcete používat asynchronní rozhraní API, musíte nejprve nainstalovat asynchronní přenos, například aiohttp: pip install aiohttp
  • Pokud používáte Azure Active Directory, musí mít objekt zabezpečení přiřazenou roli, která umožňuje přístup ke službě Service Bus, například roli vlastníka dat Azure Service Bus. Další informace o používání autorizace Azure Active Directory se službou Service Bus najdete v příslušné dokumentaci.

Poznámka: Klienta je možné inicializovat bez správce kontextu, ale musí se ručně zavřít přes client.close(), aby nedošlo k úniku prostředků.

Klíčové koncepty

Jakmile inicializujete ServiceBusClient, můžete interagovat s primárními typy prostředků v rámci oboru názvů služby Service Bus, kterých může existovat více a na kterých probíhá skutečný přenos zpráv. Obor názvů často slouží jako kontejner aplikace:

  • Fronta: Umožňuje odesílání a příjem zpráv. Často se používá pro komunikaci typu point-to-point.

  • Téma: Na rozdíl od front jsou témata vhodnější pro scénáře publikování a odběru. Téma je možné odeslat na adresu, ale vyžaduje odběr, jehož odběr může být paralelně více.

  • Odběr: Mechanismus pro využívání z tématu. Každý odběr je nezávislý a obdrží kopii každé zprávy odeslané do tématu. Pravidla a filtry se dají použít k přizpůsobení toho, které zprávy mají být přijímány konkrétním odběrem.

Další informace o těchto prostředcích najdete v tématu Co je Azure Service Bus?.

Pokud chcete s těmito prostředky pracovat, měli byste znát následující koncepty sady SDK:

  • ServiceBusClient: Jedná se o objekt, který by měl uživatel nejprve inicializovat, aby se připojil k oboru názvů služby Service Bus. Pokud chcete pracovat s frontou, tématem nebo předplatným, můžete z tohoto klienta vytvořit odesílatele nebo příjemce.

  • ServiceBusSender: K odesílání zpráv do fronty nebo tématu by se použila odpovídající get_queue_sender metoda nebo get_topic_sender z ServiceBusClient instance, jak je vidět tady.

  • ServiceBusReceiver: Pokud chcete přijímat zprávy z fronty nebo odběru, použijte odpovídající get_queue_receiver metodu nebo get_subscription_receiver z ServiceBusClient instance, jak je vidět tady.

  • ServiceBusMessage: Při odesílání se jedná o typ, který vytvoříte tak, aby obsahoval vaši datovou část. Při příjmu budete mít přístup k datové části.

Bezpečnost vlákna

Nezaručujeme, že serviceBusClient, ServiceBusSender a ServiceBusReceiver jsou bezpečné pro přístup z více vláken. Nedoporučujeme tyto instance opakovaně používat napříč vlákny. Je na spuštěné aplikaci, aby tyto třídy používala způsobem bezpečným pro přístup z více vláken.

Příklady

Následující části obsahují několik fragmentů kódu, které pokrývají některé nejběžnější úlohy služby Service Bus, mezi které patří:

Pokud chcete provádět úlohy správy, jako je vytváření a odstraňování front, témat nebo odběrů, využijte knihovnu azure-mgmt-servicebus, která je dostupná tady.

Další příklady najdete v adresáři ukázek , které ukazují běžné scénáře služby Service Bus, jako je odesílání, příjem, správa relací a zpracování zpráv.

Zasílání zpráv do fronty

POZNÁMKA: Referenční dokumentaci najdete tady.

Tento příklad odešle jednu zprávu a pole zpráv do fronty, u které se předpokládá, že už existuje, vytvořené pomocí příkazů Azure Portal nebo 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)

POZNÁMKA: Zpožděné doručení zprávy může být naplánováno pomocí ServiceBusSender.schedule_messages() metody nebo zadáním ServiceBusMessage.scheduled_enqueue_time_utc před voláním. ServiceBusSender.send_messages()

Další podrobnosti o plánování a zrušení plánu najdete tady v ukázce.

Příjem zpráv z fronty

Pokud chcete přijímat z fronty, můžete buď provést ad-hoc příjem prostřednictvím receiver.receive_messages() nebo trvale přijímat prostřednictvím samotného příjemce.

Příjem zpráv z fronty iterací přes 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.

POZNÁMKA: Každá zpráva přijatá pomocí receive_mode=PEEK_LOCK (toto je výchozí nastavení, alternativní RECEIVE_AND_DELETE zprávu odebere z fronty okamžitě po přijetí) má zámek, který je potřeba před vypršením platnosti prodloužit receiver.renew_message_lock , pokud zpracování trvá déle, než je doba uzamčení. Pokud chcete pomocnou rutinu automaticky provést na pozadí, přečtěte si automatické uzamčení. Doba trvání zámku se nastavuje v Azure u samotné fronty nebo tématu.

Příjem zpráv z fronty prostřednictvím ServiceBusReceiver.receive_messages()

POZNÁMKA:ServiceBusReceiver.receive_messages() přijímá jeden nebo omezený seznam zpráv prostřednictvím ad hoc volání metody, na rozdíl od příjmu trvale z generátoru. Vždy vrátí seznam.

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))

V tomto příkladu max_message_count deklaruje maximální počet zpráv, které se mají pokusit přijmout před dosažením max_wait_time, jak je uvedeno v sekundách.

POZNÁMKA: Je také třeba poznamenat, že ServiceBusReceiver.peek_messages() se trochu liší od příjmu, protože nezamkne náhled zpráv, a proto je nelze vyřešit.

Odeslání a příjem zpráv z fronty s povolenou relací

POZNÁMKA: Projděte si referenční dokumentaci k odesílání a přijímání relací.

Relace poskytují sémantiku typu first-in-first-out a single-receiver nad frontou nebo předplatným. I když je skutečná syntaxe příjmu stejná, inicializace se mírně liší.

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))

POZNÁMKA: Zprávy přijaté z relace nepotřebují jejich zámky obnoveny jako příjemce mimo relaci; místo toho se správa zámků provádí na úrovni relace s uzamčením relace, který lze obnovit pomocí receiver.session.renew_lock()

Práce s tématy a odběry

POZNÁMKA:Témata aodběry najdete v referenční dokumentaci.

Témata a odběry poskytují alternativu k frontám pro odesílání a přijímání zpráv. Další zastřešující podrobnosti a informace o tom, jak se liší od front, najdete tady .

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))

Vyrovnání zprávy po přijetí

Při přijímání z fronty můžete s přijatými zprávami provést několik akcí.

POZNÁMKA: Můžete usadit ServiceBusReceivedMessage pouze objekty, které jsou přijaty v ServiceBusReceiveMode.PEEK_LOCK režimu (toto je výchozí nastavení). ServiceBusReceiveMode.RECEIVE_AND_DELETE Režim odebere zprávu z fronty při příjmu. ServiceBusReceivedMessage zprávy vrácené z peek_messages() nelze vyřídit, protože zámek zprávy není převzat jako ve výše uvedených metodách příjmu.

Pokud má zpráva zámek, jak je uvedeno výše, vypořádání se nezdaří, pokud platnost zámku zprávy vypršela. Pokud by zpracování trvalo déle, než je doba uzamčení, musí být zachována prostřednictvím nástroje receiver.renew_message_lock před vypršením jeho platnosti. Doba trvání zámku se nastavuje v Azure u samotné fronty nebo tématu. Pokud chcete pomocnou rutinu automaticky provést na pozadí, přečtěte si automatické uzamčení.

Dokončit

Deklaruje úspěšné dokončení zpracování zprávy a odebere zprávu z fronty.

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)

Opustit

Zpracování zprávy se v tuto chvíli zahodí a zprávu okamžitě vrátí zpět do fronty, aby ji vyzvedl jiný (nebo stejný) příjemce.

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

Přeneste zprávu z primární fronty do speciální dílčí fronty nedoručených zpráv, kde k ní můžete přistupovat pomocí ServiceBusClient.get_<queue|subscription>_receiver funkce s parametrem sub_queue=ServiceBusSubQueue.DEAD_LETTER a přijímat ji jako jakýkoli jiný příjemce. (ukázku najdete tady)

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)

Odložit

Odložení se trochu liší od metod předchozího vypořádání. Zabrání přímému přijetí zprávy z fronty tak, že ji nastaví bokem tak, aby se při volání ServiceBusReceiver.receive_deferred_messages musela přijmout pořadovým číslem (ukázku najdete tady).

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)

Automatické prodlužování uzamčení zpráv nebo relací

POZNÁMKA: Projděte si referenční dokumentaci k automatickému prodlužování uzamčení.

AutoLockRenewer je jednoduchá metoda, jak zajistit, aby vaše zpráva nebo relace zůstala zamknutá i v dlouhých časových obdobích, pokud je volání receiver.renew_message_lock/receiver.session.renew_lock nepraktické nebo nežádoucí. Interně není mnohem více než zkratka pro vytvoření souběžného sledovacího zařízení provést obnovení zámku, pokud se blíží vypršení platnosti objektu. Měl by se použít takto:

  • Automatické prodlužování uzamčení zpráv
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()
  • Automatické prodlužování uzamčení relace
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()

Pokud bylo automatické prodlužování platnosti z nějakého důvodu přerušeno nebo selhalo, lze to zjistit prostřednictvím auto_renew_error vlastnosti obnovovaného objektu nebo předáním zpětného volání parametru on_lock_renew_failure při inicializaci obnovovacího nástroje. Projeví se také při pokusu o provedení akce (například dokončení zprávy) se zadaným objektem.

Poradce při potížích

protokolování

  • Povolte azure.servicebus protokolovacímu nástroje shromažďovat trasování z knihovny.
  • Povolte uamqp protokolovacímu nástroji shromažďování trasování ze základní knihovny uAMQP.
  • Povolte trasování na úrovni rámce AMQP nastavením logging_enable=True při vytváření klienta.
  • V některých případech může být protokolování příliš uamqp podrobné. Pokud chcete potlačit nepotřebné protokolování, přidejte na začátek kódu následující fragment kódu:
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)

Časové limity

Existují různé časové limity, o které by měl uživatel v knihovně vědět.

  • 10minutové uzavření bočního propojení služby: Po otevření se propojení zavře po 10 minutách nečinnosti, aby byla služba chráněná před únikem prostředků. To by mělo být pro uživatele do značné míry transparentní, ale pokud si všimnete, že po takové době dochází k opětovnému připojení, je to důvod. Provádění všech operací, včetně operací správy, na tomto odkazu tento časový limit prodlouží.
  • max_wait_time: Poskytuje se při vytvoření příjemce nebo při volání receive_messages(), čas, po jehož uplynutí se příjem zpráv zastaví, jakmile se žádný provoz zastaví. To platí jak pro imperativní receive_messages() funkci, tak i pro délku, pro kterou se bude typ generátoru spouštět před ukončením, pokud neexistují žádné zprávy. Předání žádné (výchozí) bude čekat donekonečna, až do 10minutové prahové hodnoty, pokud se neprovedou žádné jiné akce.

POZNÁMKA: Pokud je zpracování zprávy nebo relace dostatečně dlouhé na to, aby mohlo dojít k vypršení časových limitů, můžete jako alternativu k ručnímu volání receiver.renew_message_lock/receiver.session.renew_lock využít AutoLockRenewer výše uvedenou funkci .

Běžné výjimky

Rozhraní API služby Service Bus generují v azure.servicebus.exceptions následující výjimky:

  • ServiceBusConnectionError: V připojení ke službě došlo k chybě. Příčinou může být přechodný problém se sítí nebo problém se službou. Doporučujeme to zkusit znovu.
  • ServiceBusAuthorizationError: Při autorizaci připojení ke službě došlo k chybě. Příčinou může být to, že přihlašovací údaje nemají správné oprávnění k provedení operace. Doporučujeme zkontrolovat oprávnění přihlašovacích údajů.
  • ServiceBusAuthenticationError: Při ověřování připojení ke službě došlo k chybě. Příčinou může být nesprávné přihlašovací údaje. Doporučujeme zkontrolovat přihlašovací údaje.
  • OperationTimeoutError: To znamená, že služba neodpověděla na operaci v očekávaném čase. Příčinou může být přechodný problém se sítí nebo problém se službou. Služba může nebo nemusí úspěšně dokončit žádost; stav není znám. Doporučujeme zkusit ověřit aktuální stav a v případě potřeby to zkusit znovu.
  • MessageSizeExceededError: To znamená, že obsah zprávy je větší než velikost rámce služby Service Bus. K tomu může dojít v případě, že je v dávce odesláno příliš mnoho zpráv služby Service Bus nebo když je obsah předaný do těla Message příliš velký. Doporučuje se snížit počet zpráv odesílaných v dávce nebo velikost obsahu předávaného do jediného ServiceBusMessage.
  • MessageAlreadySettled: To znamená, že se nepodařilo zprávu vyřešit. K tomu může dojít při pokusu o vyřešení již vyřešené zprávy.
  • MessageLockLostError: Platnost zámku zprávy vypršela a zpráva byla uvolněna zpět do fronty. Bude nutné jej znovu obdržet, aby se vypořádaly. Měli byste vědět o době trvání uzamčení zprávy a obnovovat zámek před vypršením platnosti v případě dlouhé doby zpracování. AutoLockRenewer může pomoct se zachováním automatického obnovení uzamčení zprávy.
  • SessionLockLostError: Platnost zámku relace vypršela. Nevyřízené zprávy, které byly přijaty, již nelze vyřídit. Pokud v případě potřeby znovu obdržíte zprávy, doporučujeme se k relaci znovu připojit. Měli byste vědět o době trvání zámku relace a obnovovat zámek před vypršením platnosti v případě dlouhé doby zpracování. AutoLockRenewer může pomoct se zachováním automatického prodloužení uzamčení relace.
  • MessageNotFoundError: Pokus o přijetí zprávy s určitým pořadovým číslem Tato zpráva nebyla nalezena. Ujistěte se, že zpráva ještě nebyla přijata. Zkontrolujte frontu nedoručených zpráv a zjistěte, jestli zpráva není nedorucená.
  • MessagingEntityNotFoundError: Entita přidružená k operaci neexistuje nebo byla odstraněna. Ujistěte se, že entita existuje.
  • MessagingEntityDisabledError: Žádost o operaci modulu runtime u zakázané entity Aktivujte entitu.
  • ServiceBusQuotaExceededError: Entita zasílání zpráv dosáhla své maximální povolené velikosti nebo byl překročen maximální počet připojení k oboru názvů. Vytvořte v entitě prostor příjmem zpráv z entity nebo jejích podkrzí.
  • ServiceBusServerBusyError: Služba v tuto chvíli nemůže požadavek zpracovat. Klient může nějakou dobu počkat a pak operaci zopakovat.
  • ServiceBusCommunicationError: Klient nemůže navázat připojení ke službě Service Bus. Ujistěte se, že je zadaný název hostitele správný a že je hostitel dostupný. Pokud váš kód běží v prostředí s bránou firewall nebo proxy serverem, ujistěte se, že provoz do domény nebo IP adresy služby Service Bus a portů není blokovaný.
  • SessionCannotBeLockedError: Pokuste se připojit k relaci s konkrétním ID relace, ale relace je aktuálně uzamčena jiným klientem. Ujistěte se, že je relace odemknutá jinými klienty.
  • AutoLockRenewFailed: Pokus o obnovení zámku u zprávy nebo relace na pozadí se nezdařil. K tomu může dojít v případě, že je přijímač, který používá, AutoLockRenewer zavřený nebo vypršela platnost zámku obnovitelného zdroje. Doporučujeme znovu zaregistrovat obnovitelnou zprávu nebo relaci přijetím zprávy nebo se znovu připojit k entitě sessionful.
  • AutoLockRenewTimeout: Uplynul čas přidělený k prodloužení platnosti zprávy nebo uzamčení relace. Můžete znovu zaregistrovat objekt, u kterého chcete obnovit automatické uzamčení, nebo prodloužit časový limit předem.
  • ServiceBusError: Všechny ostatní chyby související se službou Service Bus Jedná se o kořenovou třídu chyb všech výše popsaných chyb.

Podrobné popisy našich běžných typů výjimek najdete v referenční dokumentaci k výjimkám .

Další kroky

Další vzorový kód

Další příklady najdete v adresáři ukázek , které ukazují běžné scénáře služby Service Bus, jako je odesílání, příjem, správa relací a zpracování zpráv.

Další dokumentace

Podrobnější dokumentaci ke službě Service Bus najdete v dokumentaci ke službě Service Bus k docs.microsoft.com.

Možnosti správy a dokumentace

Pro uživatele, kteří chtějí provádět operace správy se službou ServiceBus (vytvoření fronty, tématu atd., změna pravidel filtru, výčet entit), projděte si dokumentaci k rozhraní API v dokumentaci k azure-mgmt-servicebus . Příklady použití Terse najdete také tady .

Čistý přenos AMQP v Pythonu a podpora zpětné kompatibility

Klientská knihovna Azure Service Bus je teď založená na čisté implementaci Python AMQP. uAMQP byla odebrána jako požadovaná závislost.

uAMQP Použití jako základního přenosu:

  1. Nainstalujte uamqp pomocí pipu.
$ pip install uamqp
  1. Projít uamqp_transport=True během výstavby klienta.
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
)

Poznámka: Atribut message naServiceBusMessageBatch//ServiceBusMessageServiceBusReceivedMessage , který dříve zveřejnil uamqp.Message, je zastaralý. "Starší" objekty vrácené atributem message byly zavedeny, aby se usnadnil přechod.

Sestavení kolečka uAMQP ze zdroje

azure-servicebus závisí na uAMQP pro implementaci protokolu AMQP. Kola uAMQP jsou k dispozici pro většinu hlavních operačních systémů a budou nainstalována automaticky při instalaci azure-servicebus. Pokud má být uAMQP použit jako základní implementace protokolu AMQP pro azure-servicebus, lze pro většinu hlavních operačních systémů najít kola uAMQP.

Pokud používáte platformu, pro kterou nejsou k dispozici kola uAMQP, postupujte podle pokynů v tématu Pokud máte v úmyslu používat uAMQP platformu, pro kterou nejsou k dispozici kola uAMQP, postupujte podle pokynů k instalaci uAMQP ze zdroje.

Přispívání

Tento projekt vítá příspěvky a návrhy. Většina příspěvků vyžaduje souhlas s licenční smlouvou s přispěvatelem (CLA), která stanoví, že máte právo udělit nám práva k používání vašeho příspěvku a skutečně tak činíte. Podrobnosti najdete tady: https://cla.microsoft.com

Při odesílání žádosti o přijetí změn robot CLA automaticky určí, jestli je potřeba poskytnout smlouvu CLA, a příslušným způsobem žádost o přijetí změn upraví (např. přidáním jmenovky nebo komentáře). Stačí postupovat podle pokynů robota. Pro všechna úložiště používající naši smlouvu CLA to stačí udělat jenom jednou.

Tento projekt přijal pravidla chování pro Microsoft Open Source. Další informace najdete v nejčastějších dotazech k pravidlům chování nebo se obraťte na opencode@microsoft.com případné další dotazy nebo komentáře.