gebeurtenis
31 mrt, 23 - 2 apr, 23
De grootste fabric-, Power BI- en SQL-leerevenement. 31 maart – 2 april. Gebruik code FABINSIDER om $ 400 te besparen.
Zorg dat u zich vandaag nog registreertDeze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
Azure Service Bus-wachtrijen en onderwerpabonnementen bieden een secundaire submap, een wachtrij met dode letters (DLQ). De wachtrij met onbestelbare berichten hoeft niet expliciet te worden gemaakt en kan niet worden verwijderd of onafhankelijk van de hoofdentiteit worden beheerd.
In dit artikel worden wachtrijen met dode letters in Service Bus beschreven. Veel van de discussie wordt geïllustreerd door het voorbeeld van wachtrijen voor dode letters op GitHub.
Het doel van de wachtrij met onbestelbare berichten is berichten te bewaren die niet kunnen worden bezorgd bij een ontvanger of berichten die niet kunnen worden verwerkt. Berichten kunnen vervolgens worden verwijderd uit de DLQ en geïnspecteerd. Een toepassing kan een gebruiker toestaan problemen op te lossen en het bericht opnieuw in te dienen.
Vanuit het perspectief van een API en protocol is de DLQ meestal vergelijkbaar met elke andere wachtrij, behalve dat berichten alleen kunnen worden verzonden via de bewerking voor onbestelbare letters van de bovenliggende entiteit. Bovendien wordt time-to-live niet waargenomen en kunt u een bericht van een DLQ niet doodmaken. De wachtrij met dead-letter ondersteunt volledige normale bewerkingen, zoals peek-lock delivery, receive-and-delete en transactionele bewerkingen.
De DLQ wordt niet automatisch opgeschoond. Berichten blijven in de DLQ totdat u ze expliciet ophaalt uit de DLQ en het onbestelbare bericht voltooit.
U kunt toegang krijgen tot de wachtrij met dode letters met behulp van de volgende syntaxis:
<queue path>/$deadletterqueue
<topic path>/Subscriptions/<subscription path>/$deadletterqueue
In .NET kunt u de FormatDeadLetterPath
methode gebruiken.
QueueClient.FormatDeadLetterPath(queuePath)
SubscriptionClient.FormatDeadLetterPath(topicPath, subscriptionName)
Het verkrijgen van het aantal berichten in de wachtrij met dode letters op onderwerpniveau is niet van toepassing omdat berichten niet op onderwerpniveau zitten. Wanneer een afzender een bericht naar een onderwerp verzendt, wordt het bericht binnen milliseconden doorgestuurd naar abonnementen voor het onderwerp en bevindt het zich dus niet meer op onderwerpniveau. U kunt dus berichten zien in de DLQ die is gekoppeld aan het abonnement voor het onderwerp. In het volgende voorbeeld laat Service Bus Explorer zien dat er momenteel 62 berichten zijn in de DLQ voor het abonnement 'test1'.
U kunt ook het aantal DLQ-berichten ophalen met behulp van de Azure CLI-opdracht: az servicebus topic subscription show
.
Er zijn verschillende activiteiten in Service Bus die ertoe leiden dat berichten vanuit de berichtenengine zelf naar de DLQ worden gepusht. Een toepassing kan ook expliciet berichten naar de DLQ verplaatsen. De volgende twee eigenschappen (reden voor dode letter en beschrijving van dode letters) worden toegevoegd aan berichten met dode letters. Toepassingen kunnen hun eigen codes definiëren voor de redeneigenschap voor dode letters, maar het systeem stelt de volgende waarden in.
Reden voor dode letter | Beschrijving van fout met dode letter |
---|---|
HeaderSizeExceeded |
Het groottequotum voor deze stream heeft de limiet overschreden. |
TTLExpiredException |
Het bericht is verlopen en naar de wachtrij voor onbestelbare berichten verplaatst. Zie de sectie Time to Live voor meer informatie. |
Session ID is null . |
Door sessie ingeschakelde entiteit staat geen berichten toe waarvan de sessie-id null is. |
MaxTransferHopCountExceeded |
Het maximum aantal toegestane hops bij het doorsturen tussen wachtrijen heeft de limiet overschreden. Deze waarde is ingesteld op 4. |
MaxDeliveryCountExceeded |
Bericht kan niet worden gebruikt na maximale bezorgingspogingen. Zie de sectie Maximum aantal bezorgingen voor meer informatie. |
Wanneer u dead-lettering inschakelt voor wachtrijen of abonnementen, worden alle verlopende berichten verplaatst naar de DLQ. De redencode voor dode letters is ingesteld op: TTLExpiredException
. Uitgestelde berichten worden niet opgeschoond en verplaatst naar de wachtrij met dode letters nadat ze zijn verlopen. Dit is zo ontworpen.
Er geldt een limiet voor het aantal pogingen om berichten te leveren voor Service Bus-wachtrijen en -abonnementen. De standaardwaarde is 10. Wanneer een bericht wordt bezorgd onder een peek-lock, maar expliciet wordt afgebroken of de vergrendeling is verlopen, wordt het aantal bezorgingen op het bericht verhoogd. Wanneer het aantal bezorgingen de limiet overschrijdt, wordt het bericht verplaatst naar de DLQ. De reden van de dode letter voor het bericht in DLQ is ingesteld op: MaxDeliveryCountExceeded
. Dit gedrag kan niet worden uitgeschakeld, maar u kunt het maximumaantal leveringen instellen op een groot getal.
Als u dead-lettering inschakelt voor filterevaluatieuitzonderingen, worden eventuele fouten die optreden wanneer de SQL-filterregel van een abonnement wordt uitgevoerd, samen met het offending-bericht vastgelegd in de DLQ. Gebruik deze optie niet in een productieomgeving waarin u berichttypen hebt die naar het onderwerp worden verzonden, die geen abonnees hebben, omdat dit kan leiden tot een grote belasting van DLQ-berichten. Zorg er daarom voor dat alle berichten die naar het onderwerp worden verzonden, ten minste één overeenkomend abonnement hebben.
Naast de door het systeem geleverde functies voor dode letters kunnen toepassingen de DLQ gebruiken om onaanvaardbare berichten expliciet af te wijzen. Ze kunnen berichten bevatten die niet goed kunnen worden verwerkt vanwege een soort systeemprobleem, berichten die ongeldige nettoladingen bevatten of berichten die geen verificatie uitvoeren wanneer een beveiligingsschema op berichtniveau wordt gebruikt.
In .NET kunt u dit doen door de methode ServiceBusReceiver.DeadLetterMessageAsync aan te roepen.
We raden u aan het type uitzondering op te nemen in de DeadLetterReason
en de stacktracering van de uitzondering, DeadLetterDescription
omdat het eenvoudiger is om de oorzaak van het probleem op te lossen, wat resulteert in berichten met een dode letter. Houd er rekening mee dat het kan leiden tot berichten die de quotumlimiet van 256 kB voor de Standard-laag van Azure Service Bus overschrijden. U kunt uw Service Bus-naamruimte upgraden van de standard-laag naar de Premium-laag om hogere quota en limieten te hebben.
Berichten worden onder de volgende voorwaarden verzonden naar de wachtrij met onbestelbare berichten:
Zodra u het probleem hebt opgelost waardoor het bericht is afgepakt, kunt u het opnieuw indienen bij de wachtrij of het onderwerp dat opnieuw moet worden verwerkt. In sommige gevallen, als er veel berichten in de wachtrij met dode letters staan die moeten worden verplaatst, kan code zoals deze helpen ze allemaal tegelijk te verplaatsen. Operators geven vaak de voorkeur aan een gebruikersinterface, zodat ze problemen kunnen oplossen met welke berichttypen niet kunnen worden verwerkt, van welke bronwachtrijen en om welke redenen, terwijl ze nog steeds batches berichten opnieuw kunnen indienen om opnieuw te worden verwerkt.
Zie Dead Lettering inschakelen voor een wachtrij of abonnement voor meer informatie over verschillende manieren om de instelling voor het verlopen van berichten te configureren.
gebeurtenis
31 mrt, 23 - 2 apr, 23
De grootste fabric-, Power BI- en SQL-leerevenement. 31 maart – 2 april. Gebruik code FABINSIDER om $ 400 te besparen.
Zorg dat u zich vandaag nog registreertTraining
Module
Azure-berichtenwachtrijen detecteren - Training
Meer informatie over het integreren van Azure Service Bus- en Azure Queue Storage in uw oplossing en het verzenden en ontvangen van berichten met behulp van .NET.
Documentatie
Azure Service Bus : berichten bekijken of bekijken - Azure Service Bus
Door Service Bus-berichten te bladeren en te bekijken, kan een Azure Service Bus-client alle berichten in een wachtrij of abonnement opsommen.
Azure Service Bus-berichtoverdrachten, vergrendelingen en afwikkeling - Azure Service Bus
Dit artikel bevat een overzicht van Azure Service Bus-berichtenoverdrachten, vergrendelingen en afwikkelingsbewerkingen.
Azure Service Bus - verlooptijd van bericht - Azure Service Bus
In dit artikel wordt uitgelegd wat de vervaldatum en time to live (TTL) van Azure Service Bus-berichten zijn. Na een dergelijke deadline wordt het bericht niet meer bezorgd.