Azure Service Bus-berichten vooraf fetch
Met de functie Prefetch worden berichten op de achtergrond opgehaald in een lokale prefetchbuffer tot aan het aantal prefetchs. Berichten worden geleverd vanuit de buffer. Zoals het gebeurt, wordt ruimte vrijgemaakt in de buffer en de ontvanger maakt meer op de achtergrond.
Als u de functie Prefetch wilt inschakelen, stelt u het aantal prefetchs van de wachtrij- of abonnementsclient in op een getal dat groter is dan nul. Als u de waarde instelt op nul, wordt prefetch uitgeschakeld. Als er berichten in de prefetchbuffer staan nadat de functie is uitgeschakeld, ontvangt de toepassing deze berichten eerst van de buffer en gaat vervolgens naar de service.
Stel de eigenschap prefetch count in op de objecten ServiceBusReceiverOptions en ServiceBusProcessorOptions .
Notitie
Java Script SDK biedt geen ondersteuning voor de functie Prefetch .
Hoewel berichten beschikbaar zijn in de prefetchbuffer, worden alle volgende ontvangstoproepen onmiddellijk vanuit de buffer uitgevoerd. De buffer wordt op de achtergrond aangevuld naarmate er ruimte beschikbaar komt. Als er geen berichten beschikbaar zijn voor bezorging, leegt de ontvangstbewerking de buffer en wacht of blokkeert deze, zoals verwacht.
Waarom is Prefetch niet de standaardoptie?
Prefetch versnelt de berichtstroom door een bericht direct beschikbaar te maken voor lokaal ophalen voordat de toepassing om een bericht vraagt. Deze doorvoerwinst is het resultaat van een afweging die de auteur van de toepassing expliciet moet maken.
Wanneer u de ontvangst- en verwijdermodus gebruikt, zijn alle berichten die zijn verkregen in de prefetchbuffer niet meer beschikbaar in de wachtrij. De berichten blijven alleen in de prefetchbuffer in het geheugen totdat ze in de toepassing worden ontvangen. Als de toepassing eindigt voordat de berichten in de toepassing worden ontvangen, zijn deze berichten onherstelbaar (verloren).
Wanneer u de weergavevergrendelingsmodus voor het ontvangen van vergrendelingen gebruikt, worden berichten die in de prefetchbuffer worden opgehaald, in de buffer in een vergrendelde status verkregen. De vergrendelingstimer begint vanaf het moment dat het bericht vooraf in de buffer wordt geplaatst. Als de prefetchbuffer groot is en de verwerking zo lang duurt dat berichtvergrendelingen verlopen terwijl ze in de prefetchbuffer blijven of zelfs wanneer de toepassing het bericht verwerkt, kunnen er verwarrende gebeurtenissen zijn die de toepassing moet verwerken. De toepassing kan een bericht met een verlopen of binnenkort verlopende vergrendeling verkrijgen. Als dat het zo is, kan de toepassing het bericht verwerken, maar vervolgens vaststellen dat het bericht niet kan worden voltooid vanwege een verlooptijd van een vergrendeling. De toepassing kan de LockedUntilUtc
eigenschap controleren, maar houd er rekening mee dat er een scheeftrekken van de klok tussen de broker en de klok van de lokale machine is.
Als de vergrendeling op de achtergrond verloopt in de prefetchbuffer, wordt het bericht behandeld als verlaten en wordt het opnieuw beschikbaar gesteld voor het ophalen uit de wachtrij. Vervolgens wordt het bericht opnieuw opgehaald in de prefetchbuffer en aan het einde geplaatst Als de prefetchbuffer meestal niet kan worden verwerkt tijdens de verlooptijd van het bericht, worden berichten herhaaldelijk vooraf gezet, maar worden ze nooit effectief bezorgd in een bruikbare (geldig vergrendelde) status en uiteindelijk verplaatst naar de wachtrij met dode brieven zodra het maximale aantal bezorgingen is overschreden.
Als een toepassing een bericht expliciet afgeeft, is het bericht mogelijk opnieuw beschikbaar voor het ophalen vanuit de wachtrij. Wanneer de prefetch is ingeschakeld, wordt het bericht opnieuw in de prefetchbuffer opgehaald en aan het einde geplaatst. Omdat de berichten van de prefetchbuffer in de FIFO-volgorde (first-in first-out) worden verwijderd, kan de toepassing berichten buiten de volgorde ontvangen. De toepassing kan bijvoorbeeld een bericht met id 2 ontvangen en vervolgens een bericht met id 1 (dat eerder is verlaten) uit de buffer.
Als u een hoge mate van betrouwbaarheid nodig hebt voor het verwerken van berichten en het verwerken van berichten aanzienlijk werk en tijd kost, raden we u aan om de functie Prefetch conservatief of helemaal niet te gebruiken. Als u hoge doorvoer nodig hebt en berichtverwerking vaak goedkoop is, levert prefetch aanzienlijke doorvoervoordelen op.
Het maximale aantal prefetchs en de vergrendelingsduur die in de wachtrij of het abonnement is geconfigureerd, moeten worden verdeeld, zodat de time-out van de vergrendeling ten minste de cumulatieve verwachte verwerkingstijd voor het bericht overschrijdt voor de maximale grootte van de prefetch-buffer, plus één bericht. Tegelijkertijd mag de duur van de vergrendeling niet zo lang zijn dat berichten de maximale levensduur van berichten kunnen overschrijden terwijl ze worden vergrendeld, omdat dit betekent dat ze worden verwijderd als ze niet kunnen worden voltooid wanneer ze vooraf zijn gehaald.
Op 30 september 2026 gaan we de Azure Service Bus SDK-bibliotheken WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus en com.microsoft.azure.servicebus buiten gebruik stellen, die niet voldoen aan de Azure SDK-richtlijnen. We beëindigen ook de ondersteuning van het SBMP-protocol, zodat u dit protocol na 30 september 2026 niet meer kunt gebruiken. Migreer naar de nieuwste Azure SDK-bibliotheken, die vóór die datum essentiële beveiligingsupdates en verbeterde mogelijkheden bieden.
Hoewel de oudere bibliotheken nog steeds meer dan 30 september 2026 kunnen worden gebruikt, ontvangen ze geen officiële ondersteuning en updates meer van Microsoft. Zie de aankondiging van de buitengebruikstelling van de ondersteuning voor meer informatie.