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:
- Předplatné Azure – Vytvoření bezplatného účtu
- Azure Service Bus – obor názvů a přihlašovací údaje pro správu
- Python 3.7 nebo novější – Instalace Pythonu
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
- Pokud chcete získat požadované přihlašovací údaje, můžete použít fragment kódu Azure CLI (formátovaný pro prostředí Bash Shell) v horní části propojené ukázky a naplnit proměnnou prostředí připojovací řetězec služby Service Bus (tyto hodnoty najdete také na webu Azure Portal podle podrobného průvodce získáním služby Service Bus 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-identity
poskytuje , 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 neboget_topic_sender
zServiceBusClient
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 neboget_subscription_receiver
zServiceBusClient
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ří:
- Odeslání zpráv do fronty
- Příjem zpráv z fronty
- Odeslání a příjem zpráv z fronty s povolenou relací
- Práce s tématy a odběry
- Vyrovnání zprávy po přijetí
- Automatické prodlužování uzamčení zpráv nebo relací
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ímServiceBusMessage.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žitreceiver.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
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 vServiceBusReceiveMode.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é zpeek_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žítAutoLockRenewer
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éhoServiceBusMessage
. - 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:
- Nainstalujte
uamqp
pomocí pipu.
$ pip install uamqp
- 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
//ServiceBusMessage
ServiceBusReceivedMessage
, 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.
Azure SDK for Python