ServiceBusReceiver Třída

ServiceBusReceiver Třída definuje rozhraní vysoké úrovně pro příjem zpráv z odběru Azure Service Bus fronty nebo tématu.

Dva primární kanály pro příjem zpráv jsou receive() pro vytvoření jediného požadavku na zprávy a asynchronní pro zprávy v příjemci: průběžné přijímání příchozích zpráv průběžným způsobem.

K vytvoření instance ServiceBusReceiver použijte get_<queue/subscription>_receiver metodu ~azure.servicebus.aio.ServiceBusClient.

Dědičnost
ServiceBusReceiver
azure.servicebus.aio._base_handler_async.BaseHandler
ServiceBusReceiver
azure.servicebus._common.receiver_mixins.ReceiverMixin
ServiceBusReceiver

Konstruktor

ServiceBusReceiver(fully_qualified_namespace: str, credential: AsyncTokenCredential | AzureSasCredential | AzureNamedKeyCredential, *, queue_name: str | None = None, topic_name: str | None = None, subscription_name: str | None = None, receive_mode: ServiceBusReceiveMode | str = ServiceBusReceiveMode.PEEK_LOCK, max_wait_time: float | None = None, auto_lock_renewer: AutoLockRenewer | None = None, prefetch_count: int = 0, **kwargs: Any)

Parametry

fully_qualified_namespace
str
Vyžadováno

Plně kvalifikovaný název hostitele pro obor názvů služby Service Bus. Formát oboru názvů: .servicebus.windows.net.

credential
AsyncTokenCredential nebo AzureSasCredential nebo AzureNamedKeyCredential
Vyžadováno

Objekt přihlašovacích údajů používaný k ověřování, který implementuje konkrétní rozhraní pro získávání tokenů. Přijímá objekty přihlašovacích údajů vygenerované knihovnou azure-identity a objekty, které implementují metodu *get_token (self, scopes) nebo alternativně azureSasCredential.

queue_name
str

Cesta konkrétní fronty služby Service Bus, ke které se klient připojuje.

topic_name
str

Cesta ke konkrétnímu tématu služby Service Bus obsahující předplatné, ke kterému se klient připojuje.

subscription_name
str

Cesta ke konkrétnímu předplatnému služby Service Bus v zadaném tématu, ke které se klient připojuje.

receive_mode
Union[ServiceBusReceiveMode, str]

Režim, pomocí kterého se načtou zprávy z entity. Dvě možnosti jsou PEEK_LOCK a RECEIVE_AND_DELETE. Zprávy přijaté s PEEK_LOCK musí být vyřešeny v daném období uzamčení, než budou odebrány z fronty. Zprávy přijaté s RECEIVE_AND_DELETE budou okamžitě odebrány z fronty, a pokud se klientovi nepodaří zprávu zpracovat, nelze je následně opustit ani znovu přijímat. Výchozí režim je PEEK_LOCK.

max_wait_time
Optional[float]

Časový limit v sekundách mezi přijatými zprávami, po jehož uplynutí příjemce automaticky přestane přijímat. Výchozí hodnota je None(Žádný), což znamená žádný časový limit.

logging_enable
bool

Určuje, zda se mají protokoly trasování sítě vypisovat do protokolovacího nástroje. Výchozí hodnota je False.

transport_type
TransportType

Typ přenosového protokolu, který se použije ke komunikaci se službou Service Bus. Výchozí hodnota je TransportType.Amqp.

http_proxy
Dict

Nastavení proxy serveru HTTP. Musí se jednat o slovník s následujícími klíči: "proxy_hostname" (hodnota str) a "proxy_port" (hodnota int). Kromě toho mohou být k dispozici také následující klíče: 'username', 'password'.

user_agent
str

Pokud je zadaný, přidá se před předdefinovaný řetězec uživatelského agenta.

auto_lock_renewer
Optional[AutoLockRenewer]

Můžete zadat ~azure.servicebus.aio.AutoLockRenewer tak, aby se zprávy automaticky registrovaly při příjmu. Pokud je příjemcem relace, použije se místo toho na relaci.

prefetch_count
int

Maximální počet zpráv, které se mají při každém požadavku na službu uložit do mezipaměti. Toto nastavení je určené jenom pro pokročilé ladění výkonu. Zvýšení této hodnoty zvýší výkon propustnosti zpráv, ale zvýší šanci, že zprávy vyprší, když se uloží do mezipaměti, pokud se nezpracují dostatečně rychle. Výchozí hodnota je 0, což znamená, že zprávy budou ze služby přijímány a zpracovávány po jednom. V případě prefetch_count 0 se ServiceBusReceiver.receive pokusí uložit do mezipaměti max_message_count (pokud je k dispozici) v rámci svého požadavku na službu.

client_identifier
str

Identifikátor založený na řetězci pro jednoznačnou identifikaci instance klienta. Service Bus ji přidruží k některým chybovým zpráv, aby se usnadnila korelace chyb. Pokud nezadáte, vygeneruje se jedinečné ID.

socket_timeout
float

Čas v sekundách, kdy by měl podkladový soket na připojení čekat při odesílání a přijímání dat před vypršením časového limitu. Výchozí hodnota je 0,2 pro TransportType.Amqp a 1 pro TransportType.AmqpOverWebsocket. Pokud k chybám připojení dochází kvůli vypršení časového limitu zápisu, může být potřeba předat vyšší než výchozí hodnotu.

Proměnné

fully_qualified_namespace
str

Plně kvalifikovaný název hostitele pro obor názvů služby Service Bus. Formát oboru názvů: .servicebus.windows.net.

entity_path
str

Cesta k entitě, ke které se klient připojuje.

Metody

abandon_message

Opusťte zprávu.

Tato zpráva se vrátí do fronty a zpřístupní se k opětovnému přijetí.

close
complete_message

Dokončete zprávu.

Tím se zpráva odebere z fronty.

dead_letter_message

Přesuňte zprávu do fronty nedoručených zpráv.

Fronta nedoručených zpráv je dílčí fronta, kterou lze použít k ukládání zpráv, které se nepodařilo správně zpracovat nebo které jinak vyžadují další kontrolu nebo zpracování. Frontu lze také nakonfigurovat tak, aby odesílala zprávy s vypršenou platností do fronty nedoručených zpráv.

defer_message

Odmaví zprávu.

Tato zpráva zůstane ve frontě, ale aby mohla být přijata, musí být požadována konkrétně podle jejího pořadového čísla.

peek_messages

Umožňuje procházet zprávy, které ve frontě čekají na vyřízení.

Zprávy s náhledem se neodeberou z fronty ani nejsou uzamčené. Nelze je dokončit, odložit ani nedoručovat.

receive_deferred_messages

Příjem zpráv, které byly dříve odloženy.

Při přijímání odložených zpráv z dělené entity musí být všechna zadaná pořadová čísla zpráv ze stejného oddílu.

receive_messages

Příjem dávky zpráv najednou

Tento přístup je optimální, pokud chcete zpracovat více zpráv současně nebo provést ad hoc příjem v rámci jednoho volání.

Všimněte si, že počet zpráv načtených v jedné dávce bude záviset na tom, jestli byla pro příjemce nastavena prefetch_count . Pokud pro příjemce není nastavená prefetch_count , příjemce se pokusí uložit do mezipaměti max_message_count zprávy (pokud jsou k dispozici) v rámci požadavku na službu.

Toto volání bude upřednostňovat rychlé vrácení před schůzkou se zadanou velikostí dávky, a proto se vrátí, jakmile obdržíte aspoň jednu zprávu a v příchozích zprávách bude mezera bez ohledu na zadanou velikost dávky.

renew_message_lock

Obnovte zámek zpráv.

Tím se zachová zámek zprávy, aby se zajistilo, že se nevrátí do fronty k opětovnému zpracování.

Aby bylo možné zprávu dokončit (nebo jinak vyřešit), musí být zámek zachován a jeho platnost již vypršela; zámek, jehož platnost vypršela, nelze obnovit.

Zprávy přijaté prostřednictvím režimu RECEIVE_AND_DELETE nejsou uzamčeny, a proto je nelze obnovit. Tato operace je k dispozici pouze pro zprávy, které nejsou určené relacemi.

abandon_message

Opusťte zprávu.

Tato zpráva se vrátí do fronty a zpřístupní se k opětovnému přijetí.

async abandon_message(message: ServiceBusReceivedMessage) -> None

Parametry

message
ServiceBusReceivedMessage
Vyžadováno

Přijatá zpráva, která má být opuštěna.

Návratový typ

Výjimky

azure.servicebus.exceptions.MessageAlreadySettled if the message has been settled.
azure.servicebus.exceptions.SessionLockLostError if session lock has already expired.
azure.servicebus.exceptions.ServiceBusError when errors happen.

Příklady

Opuštění přijaté zprávy


       messages = await servicebus_receiver.receive_messages(max_wait_time=5)
       for message in messages:
           await servicebus_receiver.abandon_message(message)

close

async close() -> None

Výjimky

azure.servicebus.exceptions.MessageAlreadySettled if the message has been settled.
azure.servicebus.exceptions.SessionLockLostError if session lock has already expired.
azure.servicebus.exceptions.ServiceBusError when errors happen.

complete_message

Dokončete zprávu.

Tím se zpráva odebere z fronty.

async complete_message(message: ServiceBusReceivedMessage) -> None

Parametry

message
ServiceBusReceivedMessage
Vyžadováno

Přijatá zpráva, která má být dokončena.

Návratový typ

Výjimky

azure.servicebus.exceptions.MessageAlreadySettled if the message has been settled.
azure.servicebus.exceptions.SessionLockLostError if session lock has already expired.
azure.servicebus.exceptions.ServiceBusError when errors happen.

Příklady

Dokončete přijatou zprávu.


       messages = await servicebus_receiver.receive_messages(max_wait_time=5)
       for message in messages:
           await servicebus_receiver.complete_message(message)

dead_letter_message

Přesuňte zprávu do fronty nedoručených zpráv.

Fronta nedoručených zpráv je dílčí fronta, kterou lze použít k ukládání zpráv, které se nepodařilo správně zpracovat nebo které jinak vyžadují další kontrolu nebo zpracování. Frontu lze také nakonfigurovat tak, aby odesílala zprávy s vypršenou platností do fronty nedoručených zpráv.

async dead_letter_message(message: ServiceBusReceivedMessage, reason: str | None = None, error_description: str | None = None) -> None

Parametry

message
ServiceBusReceivedMessage
Vyžadováno

Přijatá zpráva, která má být nedoručených zpráv.

reason
Optional[str]
výchozí hodnota: None

Důvod nedoručených zpráv.

error_description
Optional[str]
výchozí hodnota: None

Podrobný popis chyby pro nedoručené zprávy.

Návratový typ

Výjimky

azure.servicebus.exceptions.MessageAlreadySettled if the message has been settled.
azure.servicebus.exceptions.SessionLockLostError if session lock has already expired.
azure.servicebus.exceptions.ServiceBusError when errors happen.

Příklady

Nedoručených zpráv přijatých zpráv


       messages = await servicebus_receiver.receive_messages(max_wait_time=5)
       for message in messages:
           await servicebus_receiver.dead_letter_message(message)

defer_message

Odmaví zprávu.

Tato zpráva zůstane ve frontě, ale aby mohla být přijata, musí být požadována konkrétně podle jejího pořadového čísla.

async defer_message(message: ServiceBusReceivedMessage) -> None

Parametry

message
ServiceBusReceivedMessage
Vyžadováno

Přijatá zpráva, která má být odložena.

Návratový typ

Výjimky

azure.servicebus.exceptions.MessageAlreadySettled if the message has been settled.
azure.servicebus.exceptions.SessionLockLostError if session lock has already expired.
azure.servicebus.exceptions.ServiceBusError when errors happen.

Příklady

Odložení přijaté zprávy


       messages = await servicebus_receiver.receive_messages(max_wait_time=5)
       for message in messages:
           await servicebus_receiver.defer_message(message)

peek_messages

Umožňuje procházet zprávy, které ve frontě čekají na vyřízení.

Zprávy s náhledem se neodeberou z fronty ani nejsou uzamčené. Nelze je dokončit, odložit ani nedoručovat.

async peek_messages(max_message_count: int = 1, *, sequence_number: int = 0, timeout: float | None = None, **kwargs: Any) -> List[ServiceBusReceivedMessage]

Parametry

max_message_count
int
výchozí hodnota: 1

Maximální počet zpráv, které se mají vyzkoušet a zobrazit. Výchozí hodnota je 1.

sequence_number
int

Pořadové číslo zprávy, ze kterého chcete začít procházet zprávy.

timeout
Optional[float]

Celkový časový limit operace v sekundách včetně všech opakovaných pokusů. Hodnota musí být větší než 0, pokud je zadána. Výchozí hodnota je None(Žádný), což znamená žádný časový limit.

Návraty

Seznam objektů ~azure.servicebus.ServiceBusReceivedMessage.

Návratový typ

Výjimky

azure.servicebus.exceptions.MessageAlreadySettled if the message has been settled.
azure.servicebus.exceptions.SessionLockLostError if session lock has already expired.
azure.servicebus.exceptions.ServiceBusError when errors happen.

Příklady

Náhled zpráv ve frontě


   async with servicebus_receiver:
       messages = await servicebus_receiver.peek_messages()
       for message in messages:
           print(str(message))

receive_deferred_messages

Příjem zpráv, které byly dříve odloženy.

Při přijímání odložených zpráv z dělené entity musí být všechna zadaná pořadová čísla zpráv ze stejného oddílu.

async receive_deferred_messages(sequence_numbers: int | List[int], *, timeout: float | None = None, **kwargs: Any) -> List[ServiceBusReceivedMessage]

Parametry

sequence_numbers
Union[int, list[int]]
Vyžadováno

Seznam pořadových čísel zpráv, které byly odloženy.

timeout
Optional[float]

Celkový časový limit operace v sekundách včetně všech opakovaných pokusů. Hodnota musí být větší než 0, pokud je zadána. Výchozí hodnota je None(Žádný), což znamená žádný časový limit.

Návraty

Seznam přijatých zpráv.

Návratový typ

list[<xref:azure.servicebus.aio.ServiceBusReceivedMessage>]

Výjimky

azure.servicebus.exceptions.MessageAlreadySettled if the message has been settled.
azure.servicebus.exceptions.SessionLockLostError if session lock has already expired.
azure.servicebus.exceptions.ServiceBusError when errors happen.

Příklady

Příjem odložených zpráv ze služby ServiceBus


   async with servicebus_receiver:
       deferred_sequenced_numbers = []
       messages = await servicebus_receiver.receive_messages(max_wait_time=5)
       for message in messages:
           deferred_sequenced_numbers.append(message.sequence_number)
           print(str(message))
           await servicebus_receiver.defer_message(message)

       received_deferred_msg = await servicebus_receiver.receive_deferred_messages(
           sequence_numbers=deferred_sequenced_numbers
       )

       for message in received_deferred_msg:
           await servicebus_receiver.complete_message(message)

receive_messages

Příjem dávky zpráv najednou

Tento přístup je optimální, pokud chcete zpracovat více zpráv současně nebo provést ad hoc příjem v rámci jednoho volání.

Všimněte si, že počet zpráv načtených v jedné dávce bude záviset na tom, jestli byla pro příjemce nastavena prefetch_count . Pokud pro příjemce není nastavená prefetch_count , příjemce se pokusí uložit do mezipaměti max_message_count zprávy (pokud jsou k dispozici) v rámci požadavku na službu.

Toto volání bude upřednostňovat rychlé vrácení před schůzkou se zadanou velikostí dávky, a proto se vrátí, jakmile obdržíte aspoň jednu zprávu a v příchozích zprávách bude mezera bez ohledu na zadanou velikost dávky.

async receive_messages(max_message_count: int | None = 1, max_wait_time: float | None = None) -> List[ServiceBusReceivedMessage]

Parametry

max_message_count
Optional[int]
výchozí hodnota: 1

Maximální počet zpráv v dávce Skutečné vrácené číslo bude záviset na velikosti prefetch_count a rychlosti příchozího datového proudu. Nastavení na Žádné bude plně záviset na konfiguraci předběžného načtení. Výchozí hodnota je 1.

max_wait_time
Optional[float]
výchozí hodnota: None

Maximální doba čekání v sekundách, než dorazí první zpráva. Pokud nedorazí žádné zprávy a není zadán žádný časový limit, toto volání se nevrátí, dokud nebude připojení ukončeno. Pokud je zadaný a během časového limitu nedorazí žádné zprávy, vrátí se prázdný seznam.

Návraty

Seznam přijatých zpráv. Pokud nejsou k dispozici žádné zprávy, bude se jednat o prázdný seznam.

Návratový typ

list[<xref:azure.servicebus.aio.ServiceBusReceivedMessage>]

Výjimky

azure.servicebus.exceptions.MessageAlreadySettled if the message has been settled.
azure.servicebus.exceptions.SessionLockLostError if session lock has already expired.
azure.servicebus.exceptions.ServiceBusError when errors happen.

Příklady

Příjem zpráv ze služby ServiceBus


   async with servicebus_receiver:
       messages = await servicebus_receiver.receive_messages(max_wait_time=5)
       for message in messages:
           print(str(message))
           await servicebus_receiver.complete_message(message)

renew_message_lock

Obnovte zámek zpráv.

Tím se zachová zámek zprávy, aby se zajistilo, že se nevrátí do fronty k opětovnému zpracování.

Aby bylo možné zprávu dokončit (nebo jinak vyřešit), musí být zámek zachován a jeho platnost již vypršela; zámek, jehož platnost vypršela, nelze obnovit.

Zprávy přijaté prostřednictvím režimu RECEIVE_AND_DELETE nejsou uzamčeny, a proto je nelze obnovit. Tato operace je k dispozici pouze pro zprávy, které nejsou určené relacemi.

async renew_message_lock(message: ServiceBusReceivedMessage, *, timeout: float | None = None, **kwargs: Any) -> datetime

Parametry

message
ServiceBusReceivedMessage
Vyžadováno

Zpráva, pro kterou se má zámek prodloužit.

timeout
Optional[float]

Celkový časový limit operace v sekundách včetně všech opakovaných pokusů. Hodnota musí být větší než 0, pokud je zadána. Výchozí hodnota je None(Žádný), což znamená žádný časový limit.

Návraty

Datum a čas UTC, na které má zámek vypršet.

Návratový typ

Výjimky

TypeError if the message is sessionful.
azure.servicebus.exceptions.MessageAlreadySettled if the message has been settled.
azure.servicebus.exceptions.MessageLockLostError if message lock has already expired.

Příklady

Obnovte zámek u přijaté zprávy.


       messages = await servicebus_receiver.receive_messages(max_wait_time=5)
       for message in messages:
           await servicebus_receiver.renew_message_lock(message)

Atributy

client_identifier

Získejte identifikátor klienta ServiceBusReceiver přidružený k instanci příjemce.

Návratový typ

str

session

Získejte objekt ServiceBusSession propojený s příjemcem. Relace je k dispozici pouze pro entity s povolenými relacemi. Pokud by byla volána na přijímači bez relací, vrátila by hodnotu None.

Návratový typ

Příklady

Získání relace od příjemce


       async with servicebus_client.get_queue_receiver(queue_name=queue_name, session_id=session_id) as receiver:
           session = receiver.session