Megosztás a következőn keresztül:


ServiceBusReceiver Osztály

A ServiceBusReceiver osztály egy magas szintű felületet határoz meg a Azure Service Bus üzenetsor- vagy témakör-előfizetésből érkező üzenetek fogadásához.

Az üzenetek fogadásának két elsődleges csatornája a fogadás(ok) egyetlen kérés kérése az üzenetekre és a fogadóban lévő üzenetekre: a bejövő üzenetek folyamatos fogadása folyamatos módon.

ServiceBusReceiver-példány létrehozásához használja az get_<queue/subscription>_receiver ~azure.servicebus.ServiceBusClient metódust.

Öröklődés
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)

Paraméterek

fully_qualified_namespace
str
Kötelező

A Service Bus-névtér teljes gazdagépneve. A névtér formátuma: .servicebus.windows.net.

credential
TokenCredential vagy AzureSasCredential vagy AzureNamedKeyCredential
Kötelező

A hitelesítéshez használt hitelesítőadat-objektum, amely egy adott felületet implementál a jogkivonatok lekéréséhez. Elfogadja az azure-identity kódtár által létrehozott hitelesítőadat-objektumokat, valamint azokat az objektumokat, amelyek a *get_token(saját, hatókörök) metódust implementálják, vagy másik lehetőségként egy AzureSasCredential is megadható.

queue_name
str

Annak a Service Bus-üzenetsornak az elérési útja, amelyhez az ügyfél csatlakozik.

topic_name
str

Egy adott Service Bus-témakör elérési útja, amely tartalmazza azt az előfizetést, amelyhez az ügyfél csatlakozik.

subscription_name
str

Az adott Service Bus-előfizetés elérési útja a megadott témakör alatt, amelyhez az ügyfél csatlakozik.

max_wait_time
Optional[float]

A fogadott üzenetek közötti időtúllépés másodpercben, amely után a fogadó automatikusan leáll. Az alapértelmezett érték Nincs, ami azt jelenti, hogy nincs időtúllépés.

receive_mode
Union[ServiceBusReceiveMode, str]

Az a mód, amellyel az üzenetek le lesznek kérve az entitásból. A két lehetőség a PEEK_LOCK és a RECEIVE_AND_DELETE. A PEEK_LOCK fogadott üzeneteket egy adott zárolási időszakon belül kell rendezni, mielőtt eltávolítanák őket az üzenetsorból. A RECEIVE_AND_DELETE fogadott üzenetek azonnal törlődnek az üzenetsorból, és nem hagyhatók el vagy nem fogadhatók újra, ha az ügyfél nem tudja feldolgozni az üzenetet. Az alapértelmezett mód a PEEK_LOCK.

logging_enable
bool

Hálózati nyomkövetési naplók kimenete a naplózónak. Az alapértelmezett érték Hamis.

transport_type
TransportType

A Service Bus szolgáltatással való kommunikációhoz használt átviteli protokoll típusa. Az alapértelmezett érték a TransportType.Amqp.

http_proxy
Dict

HTTP-proxybeállítások. Ennek a szótárnak a következő kulcsokkal kell rendelkeznie: "proxy_hostname" (str érték) és "proxy_port" (int érték). Emellett a következő kulcsok is lehetnek jelen: "felhasználónév", "jelszó".

user_agent
str

Ha meg van adva, ez a beépített felhasználói ügynök sztringje előtt lesz hozzáadva.

auto_lock_renewer
Optional[AutoLockRenewer]

A ~azure.servicebus.AutoLockRenewer szolgáltatással az üzenetek automatikusan regisztrálva lesznek a visszaigazoláskor. Ha a fogadó munkamenet-fogadó, akkor az a munkamenetre lesz alkalmazva.

prefetch_count
int

A szolgáltatásnak küldött kérésekkel gyorsítótárazandó üzenetek maximális száma. Ez a beállítás csak speciális teljesítményhangoláshoz használható. Ennek az értéknek a növelése javítja az üzenetek átviteli sebességét, de növeli annak esélyét, hogy az üzenetek a gyorsítótárazásuk során lejárnak, ha nem dolgozzák fel őket elég gyorsan. Az alapértelmezett érték 0, ami azt jelenti, hogy az üzenetek a szolgáltatástól érkeznek, és egyenként lesznek feldolgozva. Abban az esetben, ha prefetch_count 0, a ServiceBusReceiver.receive megpróbál gyorsítótárazni max_message_count (ha meg van adva) a szolgáltatásnak küldött kérésében.

client_identifier
str

Sztringalapú azonosító az ügyfélpéldány egyedi azonosításához. A Service Bus néhány hibaüzenettel társítja a hibákat a hibák könnyebb korrelációja érdekében. Ha nincs megadva, létrejön egy egyedi azonosító.

socket_timeout
float

Az az idő másodpercben, amíg a kapcsolat mögöttes szoftvercsatornájának várnia kell az adatok küldésekor és fogadásakor, mielőtt túllépi az időkorlátot. Az alapértelmezett érték a TransportType.Amqp esetében 0.2, a TransportType.AmqpOverWebsocket esetében pedig 1. Ha a kapcsolati hibák az írási időtúllépés miatt jelentkeznek, előfordulhat, hogy az alapértelmezettnél nagyobb értéket kell megadni.

Változók

fully_qualified_namespace
str

A Service Bus-névtér teljes gazdagépneve. A névtér formátuma: .servicebus.windows.net.

entity_path
str

Annak az entitásnak az elérési útja, amelyhez az ügyfél csatlakozik.

Metódusok

abandon_message

Hagyja abba az üzenetet.

Ez az üzenet visszakerül az üzenetsorba, és ismét elérhető lesz.

close
complete_message

Fejezze be az üzenetet.

Ezzel eltávolítja az üzenetet az üzenetsorból.

dead_letter_message

Helyezze át az üzenetet a Kézbesítetlen levelek üzenetsorba.

A Kézbesítetlen levelek üzenetsor egy alsor, amely a nem megfelelően feldolgozott, vagy egyéb módon további vizsgálatot vagy feldolgozást igénylő üzenetek tárolására használható. Az üzenetsor úgy is konfigurálható, hogy lejárt üzeneteket küldjön a Kézbesítetlen levelek üzenetsorba.

defer_message

Az üzenet ellenszegül.

Ez az üzenet az üzenetsorban marad, de a fogadáshoz kifejezetten a sorszáma alapján kell kérni.

next
peek_messages

Tallózzon az üzenetsorban jelenleg függőben lévő üzenetek között.

A betekintett üzeneteket a rendszer nem távolítja el az üzenetsorból, és nem is zárolja őket. Nem fejezhetők be, nem késleltethetők és nem olvashatók be.

receive_deferred_messages

Fogadja a korábban elhalasztott üzeneteket.

Ha egy particionált entitásból halasztott üzeneteket fogad, a megadott sorszámok mindegyikének ugyanabból a partícióból származó üzeneteknek kell lenniük.

receive_messages

Egyszerre fogadjon egy kötegnyi üzenetet.

Ez a módszer akkor optimális, ha egyszerre több üzenetet szeretne feldolgozni, vagy egy alkalmi fogadást egyetlen hívásként szeretne végrehajtani.

Vegye figyelembe, hogy az egyetlen kötegben lekért üzenetek száma attól függ, hogy prefetch_count be van-e állítva a fogadóhoz. Ha prefetch_count nincs beállítva a fogadóhoz, a fogadó megpróbálja gyorsítótárazza a kérésben szereplő max_message_count üzeneteket a szolgáltatásnak.

Ez a hívás fontossági sorrendbe helyezi a gyors visszatérést egy megadott kötegméret elérésekor, így amint legalább egy üzenet érkezik, és a bejövő üzenetek között eltérés van a megadott kötegmérettől függetlenül.

renew_message_lock

Újítsa meg az üzenetzárat.

Ezzel fenntartja az üzenet zárolását, hogy a rendszer ne adja vissza az újra feldolgozandó üzenetsorba.

Az üzenet befejezéséhez (vagy más módon történő rendezéséhez) a zárolást fenn kell tartani, és még nem járt le; lejárt zárolást nem lehet megújítani.

A RECEIVE_AND_DELETE módban fogadott üzenetek nincsenek zárolva, ezért nem újíthatók meg. Ez a művelet csak nem munkamenetes üzenetekhez érhető el.

abandon_message

Hagyja abba az üzenetet.

Ez az üzenet visszakerül az üzenetsorba, és ismét elérhető lesz.

abandon_message(message: ServiceBusReceivedMessage) -> None

Paraméterek

message
ServiceBusReceivedMessage
Kötelező

A kapott üzenetet el kell hagyni.

Visszatérési típus

Kivételek

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éldák

Hagyja abba a fogadott üzenetet.


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

close

close() -> None

Kivételek

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

Fejezze be az üzenetet.

Ezzel eltávolítja az üzenetet az üzenetsorból.

complete_message(message: ServiceBusReceivedMessage) -> None

Paraméterek

message
ServiceBusReceivedMessage
Kötelező

A kitöltendő fogadott üzenet.

Visszatérési típus

Kivételek

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éldák

Töltse ki a kapott üzenetet.


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

dead_letter_message

Helyezze át az üzenetet a Kézbesítetlen levelek üzenetsorba.

A Kézbesítetlen levelek üzenetsor egy alsor, amely a nem megfelelően feldolgozott, vagy egyéb módon további vizsgálatot vagy feldolgozást igénylő üzenetek tárolására használható. Az üzenetsor úgy is konfigurálható, hogy lejárt üzeneteket küldjön a Kézbesítetlen levelek üzenetsorba.

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

Paraméterek

message
ServiceBusReceivedMessage
Kötelező

A kapott üzenet kézbesíthetetlen.

reason
Optional[str]
alapértelmezett érték: None

Az üzenet kézbesíthetetlenségének oka.

error_description
Optional[str]
alapértelmezett érték: None

Az üzenet kézbesítetlen betűs írásának részletes hibaleírása.

Visszatérési típus

Kivételek

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éldák

Kézbesíthetetlen levél egy fogadott üzenetben.


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

defer_message

Az üzenet ellenszegül.

Ez az üzenet az üzenetsorban marad, de a fogadáshoz kifejezetten a sorszáma alapján kell kérni.

defer_message(message: ServiceBusReceivedMessage) -> None

Paraméterek

message
ServiceBusReceivedMessage
Kötelező

A késleltetendő fogadott üzenet.

Visszatérési típus

Kivételek

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éldák

Fogadott üzenet elhalasztása.


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

next

next()

Kivételek

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

Tallózzon az üzenetsorban jelenleg függőben lévő üzenetek között.

A betekintett üzeneteket a rendszer nem távolítja el az üzenetsorból, és nem is zárolja őket. Nem fejezhetők be, nem késleltethetők és nem olvashatók be.

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

Paraméterek

max_message_count
int
alapértelmezett érték: 1

A betekintendő üzenetek maximális száma. Az alapértelmezett érték az 1.

sequence_number
int

Egy üzenetütemezési szám, amelyből az üzenetek böngészése elkezdhető.

timeout
Optional[float]

A művelet teljes időtúllépése másodpercben, az összes újrapróbálkozási művelettel együtt. Ha meg van adva, az értéknek 0-nál nagyobbnak kell lennie. Az alapértelmezett érték Nincs, ami azt jelenti, hogy nincs időtúllépés.

Válaszok

Az ~azure.servicebus.ServiceBusReceivedMessage listája.

Visszatérési típus

Kivételek

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éldák

Tekintse meg a függőben lévő üzeneteket az üzenetsorban.


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

receive_deferred_messages

Fogadja a korábban elhalasztott üzeneteket.

Ha egy particionált entitásból halasztott üzeneteket fogad, a megadott sorszámok mindegyikének ugyanabból a partícióból származó üzeneteknek kell lenniük.

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

Paraméterek

sequence_numbers
Union[int,List[int]]
Kötelező

A elhalasztott üzenetek sorszámainak listája.

timeout
Optional[float]

A művelet teljes időtúllépése másodpercben, az összes újrapróbálkozási művelettel együtt. Ha meg van adva, az értéknek 0-nál nagyobbnak kell lennie. Az alapértelmezett érték Nincs, ami azt jelenti, hogy nincs időtúllépés.

Válaszok

A kért ~azure.servicebus.ServiceBusReceivedMessage példányok listája.

Visszatérési típus

Kivételek

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éldák

Halasztott üzenetek fogadása a ServiceBustól.


   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

Egyszerre fogadjon egy kötegnyi üzenetet.

Ez a módszer akkor optimális, ha egyszerre több üzenetet szeretne feldolgozni, vagy egy alkalmi fogadást egyetlen hívásként szeretne végrehajtani.

Vegye figyelembe, hogy az egyetlen kötegben lekért üzenetek száma attól függ, hogy prefetch_count be van-e állítva a fogadóhoz. Ha prefetch_count nincs beállítva a fogadóhoz, a fogadó megpróbálja gyorsítótárazza a kérésben szereplő max_message_count üzeneteket a szolgáltatásnak.

Ez a hívás fontossági sorrendbe helyezi a gyors visszatérést egy megadott kötegméret elérésekor, így amint legalább egy üzenet érkezik, és a bejövő üzenetek között eltérés van a megadott kötegmérettől függetlenül.

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

Paraméterek

max_message_count
Optional[int]
alapértelmezett érték: 1

A kötegben lévő üzenetek maximális száma. A visszaadott tényleges szám a prefetch_count és a bejövő stream sebességétől függ. A Nincs értékre állítás teljes mértékben az előzetes konfigurációtól függ. Az alapértelmezett érték 1.

max_wait_time
Optional[float]
alapértelmezett érték: None

Az első üzenet megérkezésének maximális időtartama másodpercben. Ha nem érkeznek üzenetek, és nincs megadva időtúllépés, a hívás csak a kapcsolat lezárásáig fog visszatérni. Ha meg van adva, az időtúllépési időszakon belül nem érkeznek üzenetek, a rendszer üres listát ad vissza.

Válaszok

A kapott üzenetek listája. Ha nem érhetők el üzenetek, ez egy üres lista lesz.

Visszatérési típus

Kivételek

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éldák

Üzenetek fogadása a ServiceBustól.


   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

Újítsa meg az üzenetzárat.

Ezzel fenntartja az üzenet zárolását, hogy a rendszer ne adja vissza az újra feldolgozandó üzenetsorba.

Az üzenet befejezéséhez (vagy más módon történő rendezéséhez) a zárolást fenn kell tartani, és még nem járt le; lejárt zárolást nem lehet megújítani.

A RECEIVE_AND_DELETE módban fogadott üzenetek nincsenek zárolva, ezért nem újíthatók meg. Ez a művelet csak nem munkamenetes üzenetekhez érhető el.

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

Paraméterek

message
ServiceBusReceivedMessage
Kötelező

A zárolás megújítására szolgáló üzenet.

timeout
Optional[float]

A művelet teljes időtúllépése másodpercben, az összes újrapróbálkozási művelettel együtt. Ha meg van adva, az értéknek 0-nál nagyobbnak kell lennie. Az alapértelmezett érték Nincs, ami azt jelenti, hogy nincs időtúllépés.

Válaszok

A zárolás utc datetime értéke a következő időpontra van beállítva: .

Visszatérési típus

Kivételek

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éldák

Újítsa meg a zárolást egy fogadott üzeneten.


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

Attribútumok

client_identifier

Kérje le a vevőpéldányhoz társított ServiceBusReceiver client_identifier.

Visszatérési típus

str

session

Kérje le a ServiceBusSession objektumot a fogadóval összekapcsolva. A munkamenet csak munkamenet-kompatibilis entitások számára érhető el, és Nem értéket ad vissza, ha nem munkamenet-fogadón hívja meg.

Visszatérési típus

Példák

Munkamenet lekérése fogadóból


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