Doručování zpráv event Gridu a opakování
Event Grid poskytuje trvalé doručování. Pokusí se doručit každou zprávu alespoň jednou pro každé odpovídající odběry okamžitě. Pokud koncový bod odběratele nepotvrdí přijetí události nebo pokud dojde k selhání, služba Event Grid opakuje doručení na základě pevného plánu opakování a zásad opakování. Event Grid ve výchozím nastavení doručí jednu událost najednou odběrateli. Datová část je však pole s jednou událostí.
Poznámka:
Event Grid nezaručuje objednávku pro doručování událostí, takže předplatitelé je můžou dostat mimo objednávku.
Plán opakování
Když Event Grid obdrží chybu pro pokus o doručení události, Event Grid rozhodne, jestli se má opakovat doručení, nedoručitelnost události nebo událost vypustit na základě typu chyby.
Pokud je chyba vrácená předplaceným koncovým bodem chybou související s konfigurací, která se nedá opravit opakovanými pokusy (například pokud je koncový bod odstraněn), event Grid buď u události provede nedoručené dopisy, nebo událost v případě, že není nakonfigurované nedoručené písmeno.
Následující tabulka popisuje typy koncových bodů a chyb, u kterých se opakování nestane:
Typ koncového bodu | Kódy chyb |
---|---|
Azure Resources (Prostředky Azure) | 400 (Chybný požadavek), 413 (entita požadavku je příliš velká) |
Webhook | 400 (Chybný požadavek), 413 (entita požadavku je příliš velká), 401 (Neautorizováno) |
Poznámka:
Pokud pro koncový bod není nakonfigurované nedoručené písmeno, události se zahodí, když dojde k výše uvedeným chybám. Pokud nechcete, aby se tyto druhy událostí vynechaly, zvažte konfiguraci nedoručených dopisů. Události nedoručených dopisů se zahodí, když se nenajde cíl nedoručených dopisů.
Pokud chyba vrácená předplatnou koncovým bodem není mezi výše uvedeným seznamem, služba Event Grid provede opakování pomocí zásad popsaných níže:
Event Grid po doručení zprávy počká 30 sekund na odpověď. Po 30 sekundách, pokud koncový bod neodpověděli, zpráva se zařadí do fronty pro opakování. Event Grid používá pro doručování událostí exponenciální zásady opakování opakování. Event Grid opakuje doručení podle následujícího plánu na základě maximálního úsilí:
- 10 sekund
- 30 sekund
- 1 min.
- 5 minut
- 10 minut
- 30 minut
- 1 hodina
- 3 hodin
- 6 hodin
- Každých 12 hodin až 24 hodin
Pokud koncový bod reaguje do 3 minut, služba Event Grid se pokusí událost odebrat z fronty opakování na základě nejlepšího úsilí, ale duplicitní položky se můžou stále přijímat.
Event Grid přidá do všech kroků opakování malou náhodnost a může oportunisticky přeskočit určité opakování, pokud koncový bod není trvale v pořádku, po dlouhou dobu dolů nebo se zdá být zahlcený.
Zásady opakování
Zásady opakování můžete přizpůsobit při vytváření odběru událostí pomocí následujících dvou konfigurací. Událost se zahodí, pokud dosáhnete některého z limitů zásad opakování.
- Maximální počet pokusů – hodnota musí být celé číslo mezi 1 a 30. Výchozí hodnota je 30.
- Hodnota TTL (Time to Live) události – hodnota musí být celé číslo mezi 1 a 1440. Výchozí hodnota je 1440 minut.
Ukázkové příkazy rozhraní příkazového řádku a PowerShellu pro konfiguraci těchto nastavení najdete v tématu Nastavení zásad opakování.
Poznámka:
Pokud nastavíte obě Event time to live (TTL)
a Maximum number of attempts
, Event Grid použije první k vypršení platnosti k určení, kdy zastavit doručování událostí. Pokud například nastavíte 30 minut jako hodnotu TTL (Time to Live) a 5 maximálních pokusů o doručení. Pokud se událost nedoručí po 30 minutách (nebo) po 5 pokusech, podle toho, co nastane dříve, událost je nedoručovaná. Pokud nastavíte maximální početpokusůch právech( (10), nastavíte-
Dávkování výstupu
Event Grid ve výchozím nastavení odesílá každou událost jednotlivě odběratelům. Odběratel obdrží pole s jednou událostí. Ve scénářích s vysokou propustností můžete službu Event Grid nakonfigurovat na dávkové události pro doručování, abyste zlepšili výkon HTTP. Dávkování je ve výchozím nastavení vypnuté a je možné ho zapnout pro jednotlivá předplatná.
Zásady dávkování
Dávkové doručování má dvě nastavení:
- Maximální počet událostí na dávku – Maximální počet událostí, které Event Grid doručuje na dávku. Toto číslo nebude nikdy překročeno, ale pokud nejsou v době publikování k dispozici žádné jiné události, může se doručovat méně událostí. Event Grid nezpozdí události, aby vytvořily dávku, pokud je k dispozici méně událostí. Musí být mezi 1 a 5 000.
- Upřednostňovaná velikost dávky v kilobajtech – cílový strop pro velikost dávky v kilobajtech. Podobně jako maximální počet událostí může být velikost dávky menší, pokud v době publikování není k dispozici více událostí. Je možné, že dávka je větší než upřednostňovaná velikost dávky, pokud je jedna událost větší než upřednostňovaná velikost. Pokud je například upřednostňovaná velikost 4 kB a událost o velikosti 10 kB se odešle do Event Gridu, bude událost 10 kB stále doručena ve své vlastní dávce a nebude se vyhazovat.
Dávkové doručování v rámci nakonfigurovaného odběru jednotlivých událostí prostřednictvím portálu, rozhraní příkazového řádku, PowerShellu nebo sad SDK
Chování dávkování
Vše nebo žádný
Event Grid pracuje s sémantikou typu all-or-none. Nepodporuje částečný úspěch doručení dávky. Předplatitelé by měli být opatrní, aby požádali pouze o tolik událostí na dávku, kolik jich dokáže přiměřeně zpracovat za 30 sekund.
Optimistické dávkování
Nastavení zásad dávkování nejsou striktní omezení chování dávkování a jsou respektována na základě maximálního úsilí. Při nízkých mírách událostí často zjistíte, že velikost dávky je menší než požadovaná maximální počet událostí na dávku.
Výchozí hodnota je nastavená na VYPNUTO.
Event Grid ve výchozím nastavení přidává do každé žádosti o doručení jenom jednu událost. Způsob, jak zapnout dávkování, je nastavit jedno z nastavení uvedených výše v článku ve formátu JSON odběru událostí.
Výchozí hodnoty
Při vytváření odběru událostí není nutné zadávat nastavení (maximální počet událostí na dávku i přibližnou velikost dávky v kilobajtů). Pokud je nastaveno pouze jedno nastavení, Event Grid používá (konfigurovatelné) výchozí hodnoty. Informace o výchozích hodnotách a jejich přepsání najdete v následujících částech.
Azure Portal:
Tato nastavení se zobrazí na kartě Další funkce na stránce Odběr událostí.
Azure CLI
Při vytváření odběru událostí použijte následující parametry:
- max-events-per-batch – maximální počet událostí v dávce. Musí to být číslo od 1 do 5000.
- preferred-batch-size-in-kilobajtů – upřednostňovaná velikost dávky v kilobajtech. Musí to být číslo v rozsahu 1 až 1024.
storageid=$(az storage account show --name <storage_account_name> --resource-group <resource_group_name> --query id --output tsv)
endpoint=https://$sitename.azurewebsites.net/api/updates
az eventgrid event-subscription create \
--resource-id $storageid \
--name <event_subscription_name> \
--endpoint $endpoint \
--max-events-per-batch 1000 \
--preferred-batch-size-in-kilobytes 512
Další informace o používání Azure CLI s Event Gridem najdete v tématu Směrování událostí úložiště do webového koncového bodu pomocí Azure CLI.
Zpožděné doručení
Vzhledem k tomu, že u koncového bodu dochází k selhání doručení, služba Event Grid začne zpozdit doručení a opakování událostí do tohoto koncového bodu. Pokud například prvních 10 událostí publikovaných do koncového bodu selže, služba Event Grid předpokládá, že u koncového bodu dochází k problémům, a po určitou dobu zpozdí všechny následné opakování a nové dodávky – v některých případech až několik hodin.
Funkčním účelem zpožděného doručování je ochrana koncových bodů, které nejsou v pořádku, a systému Event Grid. Bez zpětného vypnutí a zpoždění doručení do koncových bodů, které nejsou v pořádku, můžou zásady opakování a možnosti svazku služby Event Grid snadno zahltit systém.
Události nedoručených dopisů
Pokud Event Grid nemůže událost doručovat během určitého časového období nebo po pokusu o doručení události určitou dobu, může odeslat nedoručenou událost do účtu úložiště. Tento proces se označuje jako nedoručených dopisů. Když je splněna jedna z následujících podmínek, eventua event gridu je nedosaděná písmena.
- Událost není doručována během časového období.
- Počet pokusů o doručení události překročil limit.
Pokud jsou splněny některé z podmínek, událost se zahodí nebo nedoručí. Ve výchozím nastavení služba Event Grid nezapne nedoručitelnost. Pokud ho chcete povolit, musíte při vytváření odběru událostí zadat účet úložiště, ve kterém se budou uchovávat nezřetězené události. Události načítáte z tohoto účtu úložiště, abyste vyřešili dodávky.
Event Grid odešle událost do umístění nedoručených dopisů, když se pokusila všechny pokusy o opakování. Pokud Event Grid obdrží kód odpovědi 400 (Chybný požadavek) nebo 413 (příliš velká entita požadavku), okamžitě naplánuje událost pro nedoručitelnost. Tyto kódy odpovědí označují doručení události nikdy neuspěje.
Vypršení časového limitu je zaškrtnuto pouze při příštím plánovaném pokusu o doručení. Takže i v případě, že vyprší platnost času naživo před dalším plánovaným pokusem o doručení, je vypršení platnosti události kontrolováno pouze v době dalšího doručení a následně nedoručené dopisy.
Mezi posledním pokusem o doručení události a doručením do umístění nedoručených dopisů trvá pět minut. Toto zpoždění je určené ke snížení počtu operací úložiště objektů blob. Pokud je nedostupné místo nedoručených dopisů po dobu čtyř hodin, událost se zahodí.
Před nastavením umístění nedoručených dopisů musíte mít účet úložiště s kontejnerem. Při vytváření odběru událostí zadáte koncový bod pro tento kontejner. Koncový bod je ve formátu: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>
Možná budete chtít být upozorněni, když byla událost odeslána do umístění nedoručených dopisů. Pokud chcete službu Event Grid použít k reagování na nedoručené události, vytvořte odběr událostí pro úložiště objektů blob s nedoručenými písmeny. Pokaždé, když úložiště objektů blob nedoručených dopisů obdrží nedoručenou událost, Event Grid upozorní vaši obslužnou rutinu. Obslužná rutina reaguje akcemi, které chcete provést pro obnovení nevyřešených událostí. Příklad nastavení umístění nedoručených dopisů a zásad opakování najdete v tématu Nedoručované písmeno a zásady opakování.
Poznámka:
Pokud povolíte spravovanou identitu pro nedoručené dopisy, budete muset spravovanou identitu přidat do příslušné role řízení přístupu na základě role (RBAC) v účtu Azure Storage, který bude obsahovat nedoručené události. Další informace najdete v tématu Podporované cíle a role Azure.
Formáty událostí doručení
Tato část obsahuje příklady událostí a nedoručených událostí v různých formátech schématu doručení (schéma Event Gridu, schéma CloudEvents 1.0 a vlastní schéma). Další informace o těchto formátech najdete v článcích o schématu Event Gridu a událostech cloudu 1.0.
Schéma služby Event Grid
Událost
{
"id": "93902694-901e-008f-6f95-7153a806873c",
"eventTime": "2020-08-13T17:18:13.1647262Z",
"eventType": "Microsoft.Storage.BlobCreated",
"dataVersion": "",
"metadataVersion": "1",
"topic": "/subscriptions/000000000-0000-0000-0000-00000000000000/resourceGroups/rgwithoutpolicy/providers/Microsoft.Storage/storageAccounts/myegteststgfoo",
"subject": "/blobServices/default/containers/deadletter/blobs/myBlobFile.txt",
"data": {
"api": "PutBlob",
"clientRequestId": "c0d879ad-88c8-4bbe-8774-d65888dc2038",
"requestId": "93902694-901e-008f-6f95-7153a8000000",
"eTag": "0x8D83FACDC0C3402",
"contentType": "text/plain",
"contentLength": 0,
"blobType": "BlockBlob",
"url": "https://myegteststgfoo.blob.core.windows.net/deadletter/myBlobFile.txt",
"sequencer": "00000000000000000000000000015508000000000005101c",
"storageDiagnostics": { "batchId": "cfb32f79-3006-0010-0095-711faa000000" }
}
}
Událost nedoručených dopisů
{
"id": "93902694-901e-008f-6f95-7153a806873c",
"eventTime": "2020-08-13T17:18:13.1647262Z",
"eventType": "Microsoft.Storage.BlobCreated",
"dataVersion": "",
"metadataVersion": "1",
"topic": "/subscriptions/0000000000-0000-0000-0000-000000000000000/resourceGroups/rgwithoutpolicy/providers/Microsoft.Storage/storageAccounts/myegteststgfoo",
"subject": "/blobServices/default/containers/deadletter/blobs/myBlobFile.txt",
"data": {
"api": "PutBlob",
"clientRequestId": "c0d879ad-88c8-4bbe-8774-d65888dc2038",
"requestId": "93902694-901e-008f-6f95-7153a8000000",
"eTag": "0x8D83FACDC0C3402",
"contentType": "text/plain",
"contentLength": 0,
"blobType": "BlockBlob",
"url": "https://myegteststgfoo.blob.core.windows.net/deadletter/myBlobFile.txt",
"sequencer": "00000000000000000000000000015508000000000005101c",
"storageDiagnostics": { "batchId": "cfb32f79-3006-0010-0095-711faa000000" }
},
"deadLetterReason": "MaxDeliveryAttemptsExceeded",
"deliveryAttempts": 1,
"lastDeliveryOutcome": "NotFound",
"publishTime": "2020-08-13T17:18:14.0265758Z",
"lastDeliveryAttemptTime": "2020-08-13T17:18:14.0465788Z"
}
Tady jsou možné hodnoty lastDeliveryOutcome
a jejich popisy.
LastDeliveryOutcome | Popis |
---|---|
NotFound | Cílový prostředek nebyl nalezen. |
Zakázáno | Cíl zakázal příjem událostí. Platí pro Azure Service Bus a Azure Event Hubs. |
Úplný | Překročil maximální počet povolených operací v cíli. Platí pro Azure Service Bus a Azure Event Hubs. |
Neautorizováno | Cíl vrátil neautorizovaný kód odpovědi. |
BadRequest | Cíl vrátil chybný kód odpovědi požadavku. |
TimedOut | Vypršel časový limit operace doručení. |
Zaneprázdněný | Cílový server je zaneprázdněný. |
PayloadTooLarge | Velikost zprávy překročila maximální povolenou velikost cíle. Platí pro Azure Service Bus a Azure Event Hubs. |
Zkušební lhůta | Cíl je vložen do probace službou Event Grid. Během probace se nepokoušá o doručení. |
Zrušeno | Operace doručení byla zrušena. |
Bylo přerušeno | Služba Event Grid přerušila doručení po uplynutí časového intervalu. |
SocketError | Během doručování došlo k chybě síťové komunikace. |
Chyba řešení | Překlad DNS cílového koncového bodu se nezdařil. |
Dodávání | Doručování událostí do cíle |
SessionQueueNotSupported | Doručování událostí bez ID relace se pokouší o entitu, která má povolenou podporu relace. Platí pro cíl entity služby Azure Service Bus. |
Zakázáno | Doručování je zakázáno cílovým koncovým bodem (může to být kvůli bránám firewall protokolu IP nebo jiným omezením). |
InvalidAzureFunctionDestination | Cílová funkce Azure není platná. Pravděpodobně proto, že nemá typ EventGridTrigger. |
LastDeliveryOutcome: Probation
Odběr událostí se probuje po dobu trvání službou Event Grid, pokud se při doručování událostí do daného cíle nedaří. Doba probace se liší pro různé chyby vrácené cílovým koncovým bodem. Pokud je odběr událostí ve zkušební verzi, můžou se události dostat nedoručené nebo vyřazené, aniž by se dokonce pokoušely doručit v závislosti na kódu chyby, kvůli kterému je v probaci.
Chyba | Doba trvání zkušební doby trvání |
---|---|
Zaneprázdněný | 10 sekund |
NotFound | 5 minut |
SocketError | 30 sekund |
Chyba řešení | 5 minut |
Zakázáno | 5 minut |
Úplný | 5 minut |
TimedOut | 10 sekund |
Neautorizováno | 5 minut |
Zakázáno | 5 minut |
InvalidAzureFunctionDestination | 10 minut |
Poznámka:
Event Grid používá dobu trvání probation pro lepší správu doručení a doba trvání se může v budoucnu změnit.
Schéma CloudEvents 1.0
Událost
{
"id": "caee971c-3ca0-4254-8f99-1395b394588e",
"source": "mysource",
"dataversion": "1.0",
"subject": "mySubject",
"type": "fooEventType",
"datacontenttype": "application/json",
"data": {
"prop1": "value1",
"prop2": 5
}
}
Událost nedoručených dopisů
{
"id": "caee971c-3ca0-4254-8f99-1395b394588e",
"source": "mysource",
"dataversion": "1.0",
"subject": "mySubject",
"type": "fooEventType",
"datacontenttype": "application/json",
"data": {
"prop1": "value1",
"prop2": 5
},
"deadletterreason": "MaxDeliveryAttemptsExceeded",
"deliveryattempts": 1,
"lastdeliveryoutcome": "NotFound",
"publishtime": "2020-08-13T21:21:36.4018726Z",
}
Vlastní schéma
Událost
{
"prop1": "my property",
"prop2": 5,
"myEventType": "fooEventType"
}
Událost nedoručených dopisů
{
"id": "8bc07e6f-0885-4729-90e4-7c3f052bd754",
"eventTime": "2020-08-13T18:11:29.4121391Z",
"eventType": "myEventType",
"dataVersion": "1.0",
"metadataVersion": "1",
"topic": "/subscriptions/00000000000-0000-0000-0000-000000000000000/resourceGroups/rgwithoutpolicy/providers/Microsoft.EventGrid/topics/myCustomSchemaTopic",
"subject": "subjectDefault",
"deadLetterReason": "MaxDeliveryAttemptsExceeded",
"deliveryAttempts": 1,
"lastDeliveryOutcome": "NotFound",
"publishTime": "2020-08-13T18:11:29.4121391Z",
"lastDeliveryAttemptTime": "2020-08-13T18:11:29.4277644Z",
"data": {
"prop1": "my property",
"prop2": 5,
"myEventType": "fooEventType"
}
}
Stav doručení zprávy
Event Grid používá kódy odpovědí HTTP k potvrzení přijetí událostí.
Kódy úspěchu
Event Grid považuje za úspěšné dodávky pouze následující kódy odpovědí HTTP. Všechny ostatní stavové kódy se považují za neúspěšné dodávky a podle potřeby se budou opakovat nebo zmařit. Když Event Grid obdrží úspěšný stavový kód, považuje doručení za dokončené.
- 200 OK
- 201 Vytvořeno
- 202 Přijato
- 203 Neautoritativní informace
- 204 Chybí obsah
Kódy selhání
Všechny ostatní kódy, které nejsou v sadě (200–204), se považují za selhání a v případě potřeby se budou opakovat. Některé mají specifické zásady opakování svázané sem, všechny ostatní se řídí standardním exponenciálním back-off modelem. Je důležité mít na paměti, že vzhledem k vysoce paralelizované povaze architektury služby Event Grid je chování opakování ne deterministické.
Stavový kód | Chování opakování |
---|---|
400 – Chybný požadavek | Nezopakováno |
401 – Neautorizováno | Zkuste to znovu po 5 minutách nebo déle pro koncové body prostředků Azure. |
403 – Zakázáno | Nezopakováno |
404 – Nenalezeno | Zkuste to znovu po 5 minutách nebo déle pro koncové body prostředků Azure. |
408 – Časový limit žádosti | Zkuste to znovu za 2 minuty nebo déle. |
413 – Entita požadavku je příliš velká | Nezopakováno |
503 – Nedostupná služba | Zkuste to znovu po 30 sekundách nebo déle. |
Všichni ostatní | Zkuste to znovu po 10 sekundách nebo déle. |
Vlastní vlastnosti doručení
Odběry událostí umožňují nastavit hlavičky HTTP, které jsou součástí doručených událostí. Tato funkce umožňuje nastavit vlastní hlavičky, které jsou požadovány cílem. Při vytváření odběru událostí můžete nastavit až 10 hlaviček. Každá hodnota záhlaví by neměla být větší než 4 096 bajtů (4K). U událostí, které se doručují do následujících cílů, můžete nastavit vlastní hlavičky:
- Webhooky
- Témata a fronty služby Azure Service Bus
- Azure Event Hubs
- Relay Hybrid Connections
Další informace naleznete v tématu Vlastní vlastnosti doručení.
Další kroky
- Pokud chcete zobrazit stav dodávek událostí, přečtěte si téma Monitorování doručení zpráv event Gridu.
- Pokud chcete přizpůsobit možnosti doručování událostí, přečtěte si zásady nedoručených zpráv a opakování.