Azure Service Bus klientbibliotek för Python – version 7.11.4

Azure Service Bus är en molnhanterad meddelandetjänst med höga prestanda för att tillhandahålla realtids- och feltolerant kommunikation mellan distribuerade avsändare och mottagare.

Service Bus tillhandahåller flera mekanismer för asynkron, mycket tillförlitlig kommunikation, till exempel strukturerade meddelanden först in först ut, publicerings-/prenumerationsfunktioner och möjligheten att enkelt skala när dina behov växer.

Använd Service Bus-klientbiblioteket för Python för att kommunicera mellan program och tjänster och implementera asynkrona meddelandemönster.

  • Skapa Service Bus-namnrymder, köer, ämnen och prenumerationer och ändra deras inställningar.
  • Skicka och ta emot meddelanden i Dina Service Bus-kanaler.
  • Använd meddelandelås, sessioner och funktioner för obeställbara meddelanden för att implementera komplexa meddelandemönster.

| KällkodPaket (PyPi) | Paket (Conda) | API-referensdokumentation | Produktdokumentation | Prover | Ändringsloggen

Obs! Om du använder version 0.50 eller senare och vill migrera till den senaste versionen av det här paketet kan du läsa vår migreringsguide för att gå från Service Bus V0.50 till Service Bus V7.

Komma igång

Installera paketet

Installera Azure Service Bus-klientbiblioteket för Python med pip:

pip install azure-servicebus

Krav:

Om du vill använda det här paketet måste du ha:

Om du behöver ett Azure Service Bus-namnområde kan du skapa det via Azure-portalen. Om du inte vill använda det grafiska portalgränssnittet kan du använda Azure CLI via Cloud Shell eller Köra Azure CLI lokalt för att skapa ett med det här Azure CLI-kommandot:

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

Autentisera klienten

Interaktionen med Service Bus börjar med en instans av ServiceBusClient klassen . Du behöver antingen en anslutningssträng med SAS-nyckel eller ett namnområde och en av dess kontonycklar för att instansiera klientobjektet. Se exemplen nedan för demonstration om hur du autentiserar via någon av metoderna.

Skapa klient från anslutningssträng

  • För att hämta de nödvändiga autentiseringsuppgifterna kan du använda Azure CLI-kodfragmentet (formaterat för Bash Shell) överst i det länkade exemplet för att fylla i en miljövariabel med Service Bus-anslutningssträng (du hittar även dessa värden i Azure-portalen genom att följa den stegvisa guiden för att hämta en Service Bus-anslutningssträng).

Skapa en klient med hjälp av azure-identity-biblioteket:

  • Den här konstruktorn tar det fullständigt kvalificerade namnområdet för din Service Bus-instans och en autentiseringsuppgift som implementerar TokenCredential-protokollet . Det finns implementeringar av protokollet TokenCredential i paketet azure-identity. Det fullständigt kvalificerade namnområdet har formatet <yournamespace.servicebus.windows.net>.
  • Om du vill använda de typer av autentiseringsuppgifter som tillhandahålls av azure-identityinstallerar du paketet: pip install azure-identity
  • Om du vill använda asynkront API måste du dessutom först installera en asynkron transport, till exempel aiohttp: pip install aiohttp
  • När du använder Azure Active Directory måste huvudkontot tilldelas en roll som ger åtkomst till Service Bus, till exempel rollen Azure Service Bus dataägare. Mer information om hur du använder Azure Active Directory-auktorisering med Service Bus finns i den associerade dokumentationen.

Obs! Klienten kan initieras utan en kontexthanterare, men måste stängas manuellt via client.close() för att inte läcka resurser.

Viktiga begrepp

När du har initierat en ServiceBusClientkan du interagera med de primära resurstyperna i ett Service Bus-namnområde, där flera kan finnas och där faktisk meddelandeöverföring sker. Namnområdet fungerar ofta som en programcontainer:

  • : Tillåter att meddelanden skickas och tas emot. Används ofta för punkt-till-punkt-kommunikation.

  • Ämne: I motsats till köer är ämnen bättre lämpade för publicerings-/prenumerationsscenarier. Ett ämne kan skickas till, men kräver en prenumeration som det kan finnas flera parallellt att använda från.

  • Prenumeration: Mekanismen för att använda från ett ämne. Varje prenumeration är oberoende och får en kopia av varje meddelande som skickas till ämnet. Regler och filter kan användas för att skräddarsy vilka meddelanden som tas emot av en specifik prenumeration.

Mer information om dessa resurser finns i Vad är Azure Service Bus?.

För att interagera med dessa resurser bör man känna till följande SDK-begrepp:

  • ServiceBusClient: Det här är det objekt som en användare först ska initiera för att ansluta till ett Service Bus-namnområde. Om du vill interagera med en kö, ett ämne eller en prenumeration skapar man en avsändare eller mottagare från den här klienten.

  • ServiceBusSender: Om du vill skicka meddelanden till en kö eller ett ämne använder man motsvarande get_queue_sender eller get_topic_sender metod av en ServiceBusClient instans som visas här.

  • ServiceBusReceiver: Om du vill ta emot meddelanden från en kö eller prenumeration använder man motsvarande get_queue_receiver eller get_subscription_receiver metod utanför en ServiceBusClient instans som visas här.

  • ServiceBusMessage: När du skickar är det den här typen som du skapar för att innehålla nyttolasten. När du tar emot får du åtkomst till nyttolasten.

Trådsäkerhet

Vi garanterar inte att ServiceBusClient, ServiceBusSender och ServiceBusReceiver är trådsäkra. Vi rekommenderar inte att du återanvänder dessa instanser över trådar. Det är upp till det program som körs att använda dessa klasser på ett trådsäkert sätt.

Exempel

Följande avsnitt innehåller flera kodfragment som täcker några av de vanligaste Service Bus-uppgifterna, inklusive:

Om du vill utföra hanteringsuppgifter som att skapa och ta bort köer/ämnen/prenumerationer använder du biblioteket azure-mgmt-servicebus, som finns här.

Ytterligare exempel finns i exempelkatalogen som visar vanliga Service Bus-scenarier som att skicka, ta emot, sessionshantering och meddelandehantering.

Skicka meddelanden till en kö

Obs! Se referensdokumentationen här.

I det här exemplet skickas ett meddelande och en matris med meddelanden till en kö som antas redan finnas, som skapats via kommandona Azure Portal eller 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)

OBSERVERA: Ett meddelande kan schemaläggas för fördröjd leverans med hjälp ServiceBusSender.schedule_messages() av metoden eller genom att ange innan du anropar ServiceBusMessage.scheduled_enqueue_time_utcServiceBusSender.send_messages()

Mer information om schemaläggning och schemaläggning av annullering finns i ett exempel här.

Ta emot meddelanden från en kö

Om du vill ta emot från en kö kan du antingen utföra en ad hoc-mottagning via receiver.receive_messages() eller ta emot beständigt via själva mottagaren.

Ta emot meddelanden från en kö via iterering via 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.

OBSERVERA: Alla meddelanden som tas emot med receive_mode=PEEK_LOCK (detta är standardinställningen, med alternativ RECEIVE_AND_DELETE att ta bort meddelandet från kön omedelbart vid mottagandet) har ett lås som måste förnyas via receiver.renew_message_lock innan det upphör att gälla om bearbetningen skulle ta längre tid än låsets varaktighet. Se AutoLockRenewer för att få hjälp med att utföra detta i bakgrunden automatiskt. Låsvaraktighet anges i Azure i själva kön eller själva ämnet.

Ta emot meddelanden från en kö via ServiceBusReceiver.receive_messages()

OBSERVERA:ServiceBusReceiver.receive_messages() tar emot en enskild eller begränsad lista över meddelanden via ett ad hoc-metodanrop, i stället för att ständigt ta emot från generatorn. Den returnerar alltid en lista.

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

I det här exemplet deklarerar max_message_count det maximala antalet meddelanden som ska försöka ta emot innan ett max_wait_time som anges i sekunder.

OBSERVERA: Det bör också noteras att ServiceBusReceiver.peek_messages() skiljer sig subtilt från mottagandet, eftersom det inte låser de meddelanden som granskas och därför inte kan lösas.

Skicka och ta emot ett meddelande från en sessionsaktiverad kö

Obs! Se referensdokumentationen för att skicka och ta emot sessioner.

Sessioner tillhandahåller först-in-först-ut- och enmottagares semantik ovanpå en kö eller prenumeration. Även om den faktiska mottagningssyntaxen är densamma skiljer sig initieringen något åt.

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

Obs! Meddelanden som tas emot från en session behöver inte sina lås förnyas som en icke-sessionsmottagare; i stället sker låshanteringen på sessionsnivå med ett sessionslås som kan förnyas med receiver.session.renew_lock()

Arbeta med ämnen och prenumerationer

Obs! Se referensdokumentationen för ämnen och prenumerationer.

Ämnen och prenumerationer ger ett alternativ till köer för att skicka och ta emot meddelanden. Se dokumenten här för mer övergripande information och om hur dessa skiljer sig från köer.

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

Reglera ett meddelande efter kvitto

När du tar emot från en kö har du flera åtgärder som du kan vidta för de meddelanden som du får.

Obs! Du kan bara reglera ServiceBusReceivedMessage objekt som tas emot i ServiceBusReceiveMode.PEEK_LOCK läge (detta är standardinställningen). ServiceBusReceiveMode.RECEIVE_AND_DELETE -läget tar bort meddelandet från kön på kvittot. ServiceBusReceivedMessage meddelanden som returneras från peek_messages() kan inte lösas, eftersom meddelandelåset inte tas som det är i ovannämnda mottagningsmetoder.

Om meddelandet har ett lås som nämnts ovan misslyckas kvittningen om meddelandelåset har upphört att gälla. Om bearbetningen skulle ta längre tid än låsets varaktighet måste den underhållas via receiver.renew_message_lock innan den upphör att gälla. Låsvaraktighet anges i Azure i själva kön eller själva ämnet. Se AutoLockRenewer för att få hjälp med att utföra detta i bakgrunden automatiskt.

Klart

Deklarerar att meddelandebearbetningen ska slutföras och tar bort meddelandet från kön.

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)

Lämna

Avbryt bearbetningen av meddelandet för tillfället och returnera meddelandet direkt tillbaka till kön för att hämtas av en annan (eller samma) mottagare.

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

Överför meddelandet från den primära kön till en särskild "obeställd delkö" där den kan nås med hjälp av ServiceBusClient.get_<queue|subscription>_receiver funktionen med parametern sub_queue=ServiceBusSubQueue.DEAD_LETTER och förbrukas från som alla andra mottagare. (se exemplet här)

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)

Uppskjuta

Skjut upp skiljer sig subtilt från tidigare kvittningsmetoder. Det förhindrar att meddelandet tas emot direkt från kön genom att det åsidosätts så att det måste tas emot med sekvensnummer i ett anrop till ServiceBusReceiver.receive_deferred_messages (se exemplet här)

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)

Förnya meddelande- eller sessionslås automatiskt

Obs! Se referensdokumentationen för automatisk förnyelse av lås.

AutoLockRenewer är en enkel metod för att säkerställa att meddelandet eller sessionen förblir låst även under långa tidsperioder, om anropet receiver.renew_message_lock/receiver.session.renew_lock är opraktiskt eller oönskat. Internt är det inte mycket mer än en förkortning för att skapa en samtidig vakthund för att göra låsförnyelse om objektet närmar sig förfallodatum. Den bör användas på följande sätt:

  • Automatisk förnyelse av meddelandelås
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()
  • Automatisk förnyelse av sessionslås
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()

Om automatisk förnyelse av någon anledning har avbrutits eller misslyckats kan detta observeras via auto_renew_error egenskapen för objektet som förnyas, eller genom att ha skickat ett återanrop till parametern on_lock_renew_failure vid initiering av förnyaren. Det skulle också visas när du försöker vidta åtgärder (till exempel slutföra ett meddelande) på det angivna objektet.

Felsökning

Loggning

  • Aktivera azure.servicebus loggning för att samla in spårningar från biblioteket.
  • Aktivera uamqp loggning för att samla in spårningar från det underliggande uAMQP-biblioteket.
  • Aktivera spårning på AMQP-ramnivå genom att ange logging_enable=True när klienten skapas.
  • Det kan finnas fall där du anser att loggningen uamqp är för utförlig. Om du vill förhindra onödig loggning lägger du till följande kodfragment överst i koden:
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)

Timeouter

Det finns olika tidsgränser som en användare bör känna till i biblioteket.

  • 10 minuters stängning av länken på tjänstsidan: En länk, när den väl har öppnats, stängs efter 10 minuters inaktivitet för att skydda tjänsten mot resursläckage. Detta bör i stort sett vara transparent för en användare, men om du märker att en återanslutning sker efter en sådan varaktighet är det därför. Om du utför åtgärder, inklusive hanteringsåtgärder, på länken utökas tidsgränsen.
  • max_wait_time: Tillhandahålls när en mottagare skapas eller när den anropas receive_messages(), den tid efter vilken mottagandet av meddelanden stoppas efter ingen trafik. Detta gäller både den imperativa receive_messages() funktionen och längden som en generatorliknande mottagning körs för innan den avslutas om det inte finns några meddelanden. Om ingen skickas (standard) väntar den alltid fram till tröskelvärdet på 10 minuter om ingen annan åtgärd vidtas.

OBSERVERA: Om bearbetningen av ett meddelande eller en session är tillräckligt lång för att orsaka timeouter, som ett alternativ till att anropa receiver.renew_message_lock/receiver.session.renew_lock manuellt, kan man använda AutoLockRenewer funktionen som beskrivs ovan.

Vanliga undantag

Service Bus-API:erna genererar följande undantag i azure.servicebus.exceptions:

  • ServiceBusConnectionError: Ett fel uppstod i anslutningen till tjänsten. Detta kan ha orsakats av ett tillfälligt nätverksproblem eller tjänstproblem. Vi rekommenderar att du försöker igen.
  • ServiceBusAuthorizationError: Ett fel uppstod när anslutningen till tjänsten skulle auktoriseras. Detta kan ha orsakats av att autentiseringsuppgifterna inte har rätt behörighet att utföra åtgärden. Vi rekommenderar att du kontrollerar behörigheten för autentiseringsuppgifterna.
  • ServiceBusAuthenticationError: Ett fel uppstod när anslutningen till tjänsten skulle autentiseras. Detta kan ha orsakats av att autentiseringsuppgifterna var felaktiga. Vi rekommenderar att du kontrollerar autentiseringsuppgifterna.
  • OperationTimeoutError: Detta indikerar att tjänsten inte svarade på en åtgärd inom den förväntade tiden. Detta kan ha orsakats av ett tillfälligt nätverksproblem eller tjänstproblem. Tjänsten kanske eller kanske inte har slutfört begäran. statusen är inte känd. Vi rekommenderar att du försöker verifiera det aktuella tillståndet och försöka igen om det behövs.
  • MessageSizeExceededError: Detta anger att meddelandeinnehållet är större än Service Bus-ramstorleken. Detta kan inträffa när för många Service Bus-meddelanden skickas i en batch eller om innehållet som skickas till brödtexten i en Message är för stort. Vi rekommenderar att du minskar antalet meddelanden som skickas i en batch eller storleken på innehållet som skickas till en enda ServiceBusMessage.
  • MessageAlreadySettled: Detta indikerar att det inte gick att reglera meddelandet. Detta kan inträffa när du försöker lösa ett redan avgjort meddelande.
  • MessageLockLostError: Låset på meddelandet har upphört att gälla och det har släppts tillbaka till kön. Det måste tas emot igen för att lösa det. Du bör vara medveten om låsets varaktighet för ett meddelande och fortsätta förnya låset innan det upphör att gälla vid lång bearbetningstid. AutoLockRenewer kan bidra till att hålla meddelandets lås automatiskt förnyat.
  • SessionLockLostError: Låset för sessionen har upphört att gälla. Alla oreglerade meddelanden som har tagits emot kan inte längre lösas. Vi rekommenderar att du återansluter till sessionen om du tar emot meddelanden igen om det behövs. Du bör vara medveten om låsets varaktighet för en session och fortsätta förnya låset innan det upphör att gälla i händelse av lång bearbetningstid. AutoLockRenewer kan hjälpa till med att hålla sessionens lås automatiskt förnyat.
  • MessageNotFoundError: Försök att ta emot ett meddelande med ett visst sekvensnummer. Det här meddelandet hittades inte. Kontrollera att meddelandet inte redan har tagits emot. Kontrollera deadletter-kön för att se om meddelandet har deadlettered.
  • MessagingEntityNotFoundError: Entiteten som är associerad med åtgärden finns inte eller så har den tagits bort. Kontrollera att entiteten finns.
  • MessagingEntityDisabledError: Begäran om en körningsåtgärd på en inaktiverad entitet. Aktivera entiteten.
  • ServiceBusQuotaExceededError: Meddelandeentiteten har nått sin maximala tillåtna storlek, eller så har det maximala antalet anslutningar till ett namnområde överskridits. Skapa utrymme i entiteten genom att ta emot meddelanden från entiteten eller dess underfrågor.
  • ServiceBusServerBusyError: Tjänsten kan inte bearbeta begäran just nu. Klienten kan vänta en viss tid och sedan försöka utföra åtgärden igen.
  • ServiceBusCommunicationError: Klienten kan inte upprätta en anslutning till Service Bus. Kontrollera att det angivna värdnamnet är korrekt och att värden kan nås. Om koden körs i en miljö med en brandvägg/proxy kontrollerar du att trafiken till Service Bus-domänen/IP-adressen och portarna inte blockeras.
  • SessionCannotBeLockedError: Försök att ansluta till en session med ett specifikt sessions-ID, men sessionen är för närvarande låst av en annan klient. Kontrollera att sessionen är olåst av andra klienter.
  • AutoLockRenewFailed: Ett försök att förnya ett lås på ett meddelande eller en session i bakgrunden misslyckades. Detta kan inträffa när mottagaren som används av AutoLockRenewer är stängd eller om låset för den förnybara energin har upphört att gälla. Vi rekommenderar att du registrerar om det förnybara meddelandet eller sessionen genom att ta emot meddelandet eller ansluta till den sessionskänsliga entiteten igen.
  • AutoLockRenewTimeout: Tiden som allokerats för att förnya meddelandet eller sessionslåset har förflutit. Du kan registrera om objektet som vill förnyas automatiskt eller förlänga tidsgränsen i förväg.
  • ServiceBusError: Alla andra Service Bus-relaterade fel. Det är rotfelsklassen för alla fel som beskrivs ovan.

Se undantagsreferensdokumenten för detaljerade beskrivningar av våra vanliga undantagstyper.

Nästa steg

Mer exempelkod

Ytterligare exempel finns i exempelkatalogen som visar vanliga Service Bus-scenarier som att skicka, ta emot, sessionshantering och meddelandehantering.

Ytterligare dokumentation

Mer omfattande dokumentation om Service Bus-tjänsten finns i Service Bus-dokumentationen om docs.microsoft.com.

Hanteringsfunktioner och dokumentation

För användare som vill utföra hanteringsåtgärder mot ServiceBus (Skapa en kö/ämne/etc, ändra filterregler, räkna upp entiteter) kan du läsa dokumentationen om azure-mgmt-servicebus för API-dokumentation . Exempel på Terse-användning finns även här .

Pure Python AMQP Transport and Backward Compatibility Support

Klientbiblioteket Azure Service Bus baseras nu på en ren Python AMQP-implementering. uAMQP har tagits bort som obligatoriskt beroende.

Så här använder uAMQP du som underliggande transport:

  1. Installera uamqp med pip.
$ pip install uamqp
  1. Passera uamqp_transport=True under klientbygget.
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
)

Obs! Attributet message för ServiceBusMessage//ServiceBusMessageBatchServiceBusReceivedMessage, som tidigare exponerade uamqp.Message, har blivit inaktuellt. "Äldre" objekt som returneras av message attributet har introducerats för att underlätta övergången.

Skapa uAMQP-hjul från källa

azure-servicebus beror på uAMQP för AMQP-protokollimplementeringen. uAMQP-hjul tillhandahålls för de flesta större operativsystem och installeras automatiskt när du azure-servicebusinstallerar . Om uAMQP är avsett att användas som den underliggande AMQP-protokollimplementeringen för azure-servicebuskan uAMQP-hjul hittas för de flesta större operativsystem.

Om du kör på en plattform för vilken uAMQP-hjul inte tillhandahålls följer du Om du tänker använda uAMQP och du kör på en plattform där uAMQP-hjul inte tillhandahålls följer du uAMQP-installationsvägledningen för att installera från källan.

Bidra

Det här projektet välkomnar bidrag och förslag. Merparten av bidragen kräver att du godkänner ett licensavtal för bidrag, där du deklarerar att du har behörighet att bevilja oss rättigheten att använda ditt bidrag, och att du dessutom uttryckligen gör så. Mer information finns på https://cla.microsoft.com.

När du skickar en pull-förfrågan avgör en CLA-robot automatiskt om du måste tillhandahålla ett licensavtal för bidrag med lämplig PR (t.ex. etikett eller kommentar). Följ bara robotens anvisningar. Du behöver bara göra detta en gång för alla repor som använder vårt licensavtal för bidrag.

Det här projektet använder sig av Microsofts uppförandekod för öppen källkod. Mer information finns i Vanliga frågor och svar om uppförandekod eller kontakt opencode@microsoft.com med ytterligare frågor eller kommentarer.