Share via


ServiceBusReceiver Klass

Klassen ServiceBusReceiver definierar ett högnivågränssnitt för att ta emot meddelanden från Azure Service Bus-kö eller ämnesprenumeration.

De två primära kanalerna för meddelandekvitto är receive() för att göra en enda begäran om meddelanden och för meddelande i mottagaren: att kontinuerligt ta emot inkommande meddelanden på ett pågående sätt.

get_<queue/subscription>_receiver Använd metoden ~azure.servicebus.ServiceBusClient för att skapa en ServiceBusReceiver-instans.

Arv
azure.servicebus._base_handler.BaseHandler
ServiceBusReceiver
azure.servicebus._common.receiver_mixins.ReceiverMixin
ServiceBusReceiver

Konstruktor

ServiceBusReceiver(fully_qualified_namespace: str, credential: TokenCredential | 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)

Parametrar

fully_qualified_namespace
str
Obligatorisk

Det fullständigt kvalificerade värdnamnet för Service Bus-namnområdet. Namnområdesformatet är: .servicebus.windows.net.

credential
TokenCredential eller AzureSasCredential eller AzureNamedKeyCredential
Obligatorisk

Autentiseringsobjektet som används för autentisering som implementerar ett visst gränssnitt för att hämta token. Den accepterar autentiseringsobjekt som genereras av azure-identity-biblioteket och objekt som implementerar metoden *get_token(self, scopes), eller alternativt kan en AzureSasCredential också anges.

queue_name
str

Sökvägen till den specifika Service Bus-kö som klienten ansluter till.

topic_name
str

Sökvägen till ett specifikt Service Bus-ämne som innehåller den prenumeration som klienten ansluter till.

subscription_name
str

Sökvägen till en specifik Service Bus-prenumeration under det angivna ämnet som klienten ansluter till.

max_wait_time
Optional[float]

Tidsgränsen i sekunder mellan mottagna meddelanden varefter mottagaren slutar ta emot automatiskt. Standardvärdet är Ingen, vilket innebär att tidsgränsen inte nås.

receive_mode
Union[ServiceBusReceiveMode, str]

Det läge med vilket meddelanden hämtas från entiteten. De två alternativen är PEEK_LOCK och RECEIVE_AND_DELETE. Meddelanden som tas emot med PEEK_LOCK måste lösas inom en viss låsperiod innan de tas bort från kön. Meddelanden som tas emot med RECEIVE_AND_DELETE tas omedelbart bort från kön och kan inte överges eller tas emot igen om klienten inte kan bearbeta meddelandet. Standardläget är PEEK_LOCK.

logging_enable
bool

Om du vill mata ut nätverksspårningsloggar till loggaren. Standardvärdet är Falskt.

transport_type
TransportType

Den typ av transportprotokoll som ska användas för kommunikation med Service Bus-tjänsten. Standardvärdet är TransportType.Amqp.

http_proxy
Dict

HTTP-proxyinställningar. Det här måste vara en ordlista med följande nycklar: "proxy_hostname" (str-värde) och "proxy_port" (int-värde). Dessutom kan följande nycklar finnas: "användarnamn", "lösenord".

user_agent
str

Om detta anges läggs detta till framför den inbyggda användaragentsträngen.

auto_lock_renewer
Optional[AutoLockRenewer]

En ~azure.servicebus.AutoLockRenewer kan tillhandahållas så att meddelanden registreras automatiskt vid kvitto. Om mottagaren är en sessionsmottagare gäller den i stället för sessionen.

prefetch_count
int

Det maximala antalet meddelanden som ska cachelagrats med varje begäran till tjänsten. Den här inställningen är endast avsedd för avancerad prestandajustering. Om du ökar det här värdet förbättras dataflödesprestanda för meddelanden, men det ökar risken för att meddelanden upphör att gälla medan de cachelagras om de inte bearbetas tillräckligt snabbt. Standardvärdet är 0, vilket innebär att meddelanden tas emot från tjänsten och bearbetas en i taget. Om prefetch_count är 0 försöker ServiceBusReceiver.receive cachelagrar max_message_count (om det tillhandahålls) inom sin begäran till tjänsten.

client_identifier
str

En strängbaserad identifierare som unikt identifierar klientinstansen. Service Bus associerar den med vissa felmeddelanden för enklare korrelation av fel. Om inget anges genereras ett unikt ID.

socket_timeout
float

Tiden i sekunder som den underliggande socketen på anslutningen ska vänta när data skickas och tas emot innan tidsgränsen nås. Standardvärdet är 0,2 för TransportType.Amqp och 1 för TransportType.AmqpOverWebsocket. Om anslutningsfel uppstår på grund av tidsgränsen för skrivning kan ett större värde än standardvärdet behöva skickas in.

Variabler

fully_qualified_namespace
str

Det fullständigt kvalificerade värdnamnet för Service Bus-namnområdet. Namnområdesformatet är: .servicebus.windows.net.

entity_path
str

Sökvägen till entiteten som klienten ansluter till.

Metoder

abandon_message

Avbryt meddelandet.

Det här meddelandet kommer att returneras till kön och göras tillgängligt för att tas emot igen.

close
complete_message

Slutför meddelandet.

Detta tar bort meddelandet från kön.

dead_letter_message

Flytta meddelandet till kön Obeställbara meddelanden.

Kön för obeställbara meddelanden är en underkö som kan användas för att lagra meddelanden som inte bearbetas korrekt, eller som på annat sätt kräver ytterligare kontroll eller bearbetning. Kön kan också konfigureras för att skicka utgångna meddelanden till kön Obeställbara meddelanden.

defer_message

Skjuter upp meddelandet.

Det här meddelandet finns kvar i kön men måste begäras specifikt av dess sekvensnummer för att kunna tas emot.

next
peek_messages

Bläddra bland meddelanden som väntar i kön.

Genomsiktade meddelanden tas inte bort från kön och de är inte heller låsta. De kan inte fyllas i, skjutas upp eller obeställbara.

receive_deferred_messages

Ta emot meddelanden som tidigare har skjutits upp.

När du tar emot uppskjutna meddelanden från en partitionerad entitet måste alla angivna sekvensnummer vara meddelanden från samma partition.

receive_messages

Ta emot en batch med meddelanden samtidigt.

Den här metoden är optimal om du vill bearbeta flera meddelanden samtidigt eller utföra en ad hoc-mottagning som ett enda anrop.

Observera att antalet meddelanden som hämtas i en enda batch beror på om prefetch_count har angetts för mottagaren. Om prefetch_count inte har angetts för mottagaren försöker mottagaren cachelagrar max_message_count (om det tillhandahålls) meddelanden i begäran till tjänsten.

Det här anropet prioriterar att returnera snabbt över att uppfylla en angiven batchstorlek, så returneras så snart minst ett meddelande tas emot och det finns en lucka i inkommande meddelanden oavsett den angivna batchstorleken.

renew_message_lock

Förnya meddelandelåset.

Detta behåller låset på meddelandet för att säkerställa att det inte returneras till kön som ska bearbetas på nytt.

För att kunna slutföra (eller på annat sätt reglera) meddelandet måste låset underhållas och kan inte redan ha upphört att gälla. det går inte att förnya ett utgånget lås.

Meddelanden som tas emot via RECEIVE_AND_DELETE läge är inte låsta och kan därför inte förnyas. Den här åtgärden är endast tillgänglig för icke-sessionskänsliga meddelanden.

abandon_message

Avbryt meddelandet.

Det här meddelandet kommer att returneras till kön och göras tillgängligt för att tas emot igen.

abandon_message(message: ServiceBusReceivedMessage) -> None

Parametrar

message
ServiceBusReceivedMessage
Obligatorisk

Det mottagna meddelandet som ska överges.

Returtyp

Undantag

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.

Exempel

Överge ett mottaget meddelande.


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

close

close() -> None

Undantag

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

Slutför meddelandet.

Detta tar bort meddelandet från kön.

complete_message(message: ServiceBusReceivedMessage) -> None

Parametrar

message
ServiceBusReceivedMessage
Obligatorisk

Det mottagna meddelandet som ska slutföras.

Returtyp

Undantag

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.

Exempel

Slutför ett mottaget meddelande.


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

dead_letter_message

Flytta meddelandet till kön Obeställbara meddelanden.

Kön för obeställbara meddelanden är en underkö som kan användas för att lagra meddelanden som inte bearbetas korrekt, eller som på annat sätt kräver ytterligare kontroll eller bearbetning. Kön kan också konfigureras för att skicka utgångna meddelanden till kön Obeställbara meddelanden.

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

Parametrar

message
ServiceBusReceivedMessage
Obligatorisk

Det mottagna meddelandet att vara obeställbara.

reason
Optional[str]
standardvärde: None

Anledningen till att meddelandet skrivs i obeställbara meddelanden.

error_description
Optional[str]
standardvärde: None

Den detaljerade felbeskrivningen för obeställbara meddelanden i meddelandet.

Returtyp

Undantag

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.

Exempel

Obeställbara meddelanden ett mottaget meddelande.


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

defer_message

Skjuter upp meddelandet.

Det här meddelandet finns kvar i kön men måste begäras specifikt av dess sekvensnummer för att kunna tas emot.

defer_message(message: ServiceBusReceivedMessage) -> None

Parametrar

message
ServiceBusReceivedMessage
Obligatorisk

Det mottagna meddelandet ska skjutas upp.

Returtyp

Undantag

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.

Exempel

Skjut upp ett mottaget meddelande.


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

next

next()

Undantag

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.

peek_messages

Bläddra bland meddelanden som väntar i kön.

Genomsiktade meddelanden tas inte bort från kön och de är inte heller låsta. De kan inte fyllas i, skjutas upp eller obeställbara.

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

Parametrar

max_message_count
int
standardvärde: 1

Det maximala antalet meddelanden som ska provas. Standardvärdet är 1.

sequence_number
int

Ett meddelandesekvensnummer som du vill börja bläddra bland meddelanden från.

timeout
Optional[float]

Den totala tidsgränsen för åtgärden i sekunder, inklusive alla återförsök. Värdet måste vara större än 0 om det anges. Standardvärdet är Ingen, vilket innebär att tidsgränsen inte nås.

Returer

En lista med ~azure.servicebus.ServiceBusReceivedMessage.

Returtyp

Undantag

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.

Exempel

Titta på väntande meddelanden i kön.


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

receive_deferred_messages

Ta emot meddelanden som tidigare har skjutits upp.

När du tar emot uppskjutna meddelanden från en partitionerad entitet måste alla angivna sekvensnummer vara meddelanden från samma partition.

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

Parametrar

sequence_numbers
Union[int,List[int]]
Obligatorisk

En lista över sekvensnummer för meddelanden som har skjutits upp.

timeout
Optional[float]

Den totala tidsgränsen för åtgärden i sekunder, inklusive alla återförsök. Värdet måste vara större än 0 om det anges. Standardvärdet är Ingen, vilket innebär att tidsgränsen inte nås.

Returer

En lista över begärda ~azure.servicebus.ServiceBusReceivedMessage-instanser.

Returtyp

Undantag

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.

Exempel

Ta emot uppskjutna meddelanden från ServiceBus.


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

       received_deferred_msg = servicebus_receiver.receive_deferred_messages(
           sequence_numbers=deferred_sequenced_numbers
       )

       for msg in received_deferred_msg:
           servicebus_receiver.complete_message(msg)

receive_messages

Ta emot en batch med meddelanden samtidigt.

Den här metoden är optimal om du vill bearbeta flera meddelanden samtidigt eller utföra en ad hoc-mottagning som ett enda anrop.

Observera att antalet meddelanden som hämtas i en enda batch beror på om prefetch_count har angetts för mottagaren. Om prefetch_count inte har angetts för mottagaren försöker mottagaren cachelagrar max_message_count (om det tillhandahålls) meddelanden i begäran till tjänsten.

Det här anropet prioriterar att returnera snabbt över att uppfylla en angiven batchstorlek, så returneras så snart minst ett meddelande tas emot och det finns en lucka i inkommande meddelanden oavsett den angivna batchstorleken.

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

Parametrar

max_message_count
Optional[int]
standardvärde: 1

Maximalt antal meddelanden i batchen. Det faktiska antalet som returneras beror på prefetch_count och inkommande strömhastighet. Inställningen Till Ingen beror helt på prefetch-konfigurationen. Standardvärdet är 1.

max_wait_time
Optional[float]
standardvärde: None

Maximal väntetid i sekunder för att det första meddelandet ska tas emot. Om inga meddelanden tas emot och ingen tidsgräns har angetts returneras inte det här anropet förrän anslutningen har stängts. Om inget meddelande tas emot inom tidsgränsen returneras en tom lista.

Returer

En lista över mottagna meddelanden. Om inga meddelanden är tillgängliga är det här en tom lista.

Returtyp

Undantag

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.

Exempel

Ta emot meddelanden från ServiceBus.


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

renew_message_lock

Förnya meddelandelåset.

Detta behåller låset på meddelandet för att säkerställa att det inte returneras till kön som ska bearbetas på nytt.

För att kunna slutföra (eller på annat sätt reglera) meddelandet måste låset underhållas och kan inte redan ha upphört att gälla. det går inte att förnya ett utgånget lås.

Meddelanden som tas emot via RECEIVE_AND_DELETE läge är inte låsta och kan därför inte förnyas. Den här åtgärden är endast tillgänglig för icke-sessionskänsliga meddelanden.

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

Parametrar

message
ServiceBusReceivedMessage
Obligatorisk

Meddelandet som låset ska förnyas för.

timeout
Optional[float]

Den totala tidsgränsen för åtgärden i sekunder, inklusive alla återförsök. Värdet måste vara större än 0 om det anges. Standardvärdet är Ingen, vilket innebär ingen tidsgräns.

Returer

Utc datetime som låset är inställt på förfaller på.

Returtyp

Undantag

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.

Exempel

Förnya låset på ett mottaget meddelande.


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

Attribut

client_identifier

Hämta ServiceBusReceiver-client_identifier som är associerad med mottagarinstansen.

Returtyp

str

session

Hämta ServiceBusSession-objektet som är länkat till mottagaren. Sessionen är endast tillgänglig för sessionsaktiverade entiteter. Den returnerar Ingen om den anropas på en mottagare som inte är sessionsaktiverad.

Returtyp

Exempel

Hämta session från en mottagare


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