Přehled Service Bus front zpráv
Azure Service Bus fronty a odběry témat poskytují sekundární dílčí frontu nazývanou fronta zpráv (DLQ). Fronta zpráv není potřeba explicitně vytvářet a není možné ji odstranit ani spravovat nezávisle na hlavní entitě.
Tento článek popisuje fronty zpráv s Service Bus. Velkou část diskuze ilustruje ukázka front dead-letter na GitHub.
Fronta zpráv o doručení zpráv
Účelem fronty zpráv zpráv je uchovat zprávy, které nelze doručit žádnému příjemci, nebo zprávy, které se nešlo zpracovat. Zprávy je pak možné odebrat z DLQ a zkontrolovat. Aplikace může s pomocí operátora opravit problémy a znovu odeslat zprávu, protokolovat skutečnost, že došlo k chybě, a provést nápravnou akci.
Z pohledu rozhraní API a protokolu je dlq většinou podobný jakékoli jiné frontě, s tím rozdílem, že zprávy je možné odesílat pouze prostřednictvím operace dead-letter nadřazené entity. Kromě toho se nevypozoruje doba TT a nelze odeslat zprávu z DLQ. Fronta zpráv plně podporuje doručení náhledu a uzamčení a transakční operace.
DlQ se automaticky vyčisní. Zprávy zůstanou v DLQ, dokud je explicitně nenačítáte z DLQ a nedokončíte nedoručené zprávy.
Počet zpráv DLQ
Počet zpráv ve frontě zpráv není možné získat na úrovni tématu. Je to proto, že zprávy nejsou na úrovni tématu, pokud Service Bus vyvolá vnitřní chybu. Místo toho, když odesílatel odešle zprávu do tématu, zpráva se předá odběrům tématu v řádu milisekund, a proto se už nebude nacházet na úrovni tématu. Proto můžete zobrazit zprávy v DLQ přidružené k odběru tématu. V následujícím příkladu průzkumník Service Bus, že v dlq pro odběr "test1" aktuálně existuje 62 zpráv.

Počet zpráv DLQ můžete získat také pomocí příkazu Azure CLI: az servicebus topic subscription show .
Přesun zpráv do DLQ
V modulu pro zasílání zpráv Service Bus několik aktivit, které způsobují, že se zprávy budou odesílat do DLQ přímo v samotném modulu pro zasílání zpráv. Aplikace může také explicitně přesunout zprávy do DLQ. Do zpráv s dead-letterem se přidávají následující dvě vlastnosti (důvod zablokování a popis vlastního písmena). Aplikace mohou definovat vlastní kódy pro vlastnost důvodu pro dead-letter, ale systém nastaví následující hodnoty.
| Důvod pro neschůdné dopisy | Popis chyby typu Dead-letter |
|---|---|
| HeaderSizeExceeded | Kvóta velikosti pro tento datový proud byla překročena. |
| TTLExpiredException | Zprávě vypršela platnost a zařadila se do fronty nedoručených zpráv. Podrobnosti najdete v části TT (Time to Live). |
| ID relace má hodnotu null. | Entita povolená relací nepodporuje zprávy, jejichž identifikátor relace má hodnotu null. |
| MaxTransferHopCountExceeded | Maximální počet povolených segmentů směrování při předávání mezi frontami Hodnota je nastavená na 4. |
| MaxDeliveryCountExceededExceptionMessage | Zpráva se po maximálních pokusech o doručení nemohla spotřebovat. Podrobnosti najdete v části Maximální počet doručení. |
Maximální počet doručení
Počet pokusů o doručení zpráv pro fronty a odběry Service Bus limit. Výchozí hodnota je 10. Pokaždé, když se zpráva doručí pod zamykáním náhledu, ale byla explicitně zrušena nebo platnost zámku vypršela, zvýší se počet doručení zprávy. Když počet doručení překročí limit, zpráva se přesune do DLQ. Důvod nedoručených zpráv v DLQ je nastavený na: MaxDeliveryCountExceeded. Toto chování není možné zakázat, ale maximální počet doručení můžete nastavit na velký počet.
Hodnota TTL (Time to Live)
Když ve frontách nebo odběrech povolíte dead-lettering, všechny zprávy, u které vyprší platnost, se přesunou do DLQ. Kód důvodu nezáručných dopisů je nastavený na hodnotu TTLExpiredException.
Odložené zprávy se také po vypršení jejich platnosti nevyprázdní a přesunou do fronty zpráv. Toto chování je záměrné.
Chyby při zpracování pravidel předplatného
Pokud pro výjimky vyhodnocení filtru povolíte dead-lettering, všechny chyby, ke kterým dojde při provádění pravidla filtru SQL předplatného, se zachycují v DLQ spolu s urážející zprávou. Nepoužívejte tuto možnost v produkčním prostředí, ve kterém ne všechny typy zpráv mají odběratele.
Dead-lettering na úrovni aplikace
Kromě systémových funkcí pro dead-lettering mohou aplikace používat DLQ k explicitnímu odmítnutí nepřijatelných zpráv. Mohou zahrnovat zprávy, které nelze správně zpracovat z důvodu jakéhokoli druhu problému se systémem, zpráv, které obsahují poškozené datové části, nebo zprávy, které při použití určitého schématu zabezpečení na úrovni zpráv selžou ověření.
Dead-lettering ve scénářích ForwardTo nebo SendVia
Zprávy se budou odesílat do fronty přenosu zpráv za následujících podmínek:
- Zpráva prochází více než čtyřmi frontami nebo tématy, které jsou zřetězovány dohromady.
- Cílová fronta nebo téma je zakázané nebo odstraněné.
- Cílová fronta nebo téma překračuje maximální velikost entity.
Cesta k frontě pro doručení zpráv
K frontě pro doručení zpráv můžete získat přístup pomocí následující syntaxe:
<queue path>/$deadletterqueue
<topic path>/Subscriptions/<subscription path>/$deadletterqueue
Další kroky
Informace o různých způsobech konfigurace nastavení platnosti platnosti zpráv najdete v tématu Povolení dead letteringu pro frontu nebo odběr.