Event Grid doručování zpráv a opakování
Event Grid zajišťuje trvalé doručování. Pokusí se doručit každou zprávu alespoň jednou pro každý odpovídající odběr okamžitě. Pokud koncový bod odběratele nepotvrzí příjem události nebo pokud dojde k selhání, Event Grid na základě pevného plánu opakování a zásady opakovánízkusí znovu doručení. Ve výchozím nastavení modul Event Grid doručuje odběrateli jednu událost po jedné. Datová část je ale pole s jednou událostí.
Poznámka
Event Grid nezaručuje pořadí doručování událostí, takže je předplatitelé mohou obdržet mimo pořadí.
Plán opakování
Když EventGrid obdrží chybu při pokusu o doručení události, EventGrid se rozhodne, jestli má na základě typu chyby opakovat doručení, zahodí událost nebo ji zahodí.
Pokud je chyba vrácená odebíraným koncovým bodem chybou související s konfigurací, kterou není možné opravit opakováním pokusů (například pokud je koncový bod odstraněn), EventGrid pro událost buď provede zprávu dead-lettering, nebo ji odstraní, pokud není nakonfigurovaná funkce dead-letter.
Následující tabulka popisuje typy koncových bodů a chyby, pro které se opakování nestane:
| Typ koncového bodu | Kódy chyb |
|---|---|
| Prostředky Azure | 400 Chybný požadavek, 413 Příliš velká entita požadavku, 403 Zakázáno |
| Webhook | 400 Chybný požadavek, 413 Request Entity Too Large, 403 Forbidden, 404 Not Found, 401 Unauthorized |
Poznámka
Pokud Dead-Letter koncový bod nakonfigurovaný, události se zahodí, když dojde k výše uvedeným chybám. Zvažte Dead-Letter, pokud nechcete, aby se tyto typy událostí zahodily.
Pokud chyba vrácená odebíra uvedeným koncovým bodem není v seznamu výše, EventGrid provede opakování pomocí zásad popsaných níže:
Event Grid po doručení zprávy počká 30 sekund na odpověď. Pokud koncový bod po 30 sekundách neodpověděl, zpráva se zařadit do fronty pro opakování. Event Grid k doručování událostí používá zásady opakování exponenciálního omezení. Event Grid pokusů o opakování podle následujícího plánu s maximálním úsilím:
- 10 sekund
- 30 sekund
- 1 min.
- 5 minut
- 10 minut
- 30 minut
- 1 hodina
- 3 hodiny
- 6 hodin
- Každých 12 hodin až 24 hodin
Pokud koncový bod odpoví během 3 minut, Event Grid se pokusí odebrat událost z fronty opakování v rámci co nejlepšího úsilí, ale přesto může dojít k přijetí duplicit.
Event Grid přidá ke všem krokům opakování malou randomizaci a může oportunisticky přeskočit určité opakování, pokud koncový bod trvale není v pořádku, dlouhou dobu je nefunkčně 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í. Pokud dosáhnete jednoho z limitů zásad opakování, událost se zahodí.
- Maximální počet pokusů – Hodnota musí být celé číslo v rozmezí 1 až 30. Výchozí hodnota je 30.
- Hodnota TTL (Time to Live) události – hodnota musí být celé číslo v rozmezí od 1 do 1440. Výchozí hodnota je 1 440 minut.
Ukázkový příkaz rozhraní příkazového řádku a powershellového příkazu pro konfiguraci těchto nastavení najdete v tématu Nastavení zásady opakování.
Dávkování výstupu
Event Grid výchozím nastavení odesílá jednotlivé události odběratelům. Odběratel obdrží pole s jednou událostí. Ve scénářích s Event Grid propustností můžete nakonfigurovat dávkové události pro doručení, abyste zlepšili výkon protokolu HTTP. Dávkování je ve výchozím nastavení vypnuté a je možné ho zapnout pro jedno 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í, Event Grid se budou doručovat na dávku. Toto číslo se nikdy nepřesáhlo, ale pokud v době publikování nejsou k dispozici žádné jiné události, může být doručeno méně událostí. Event Grid při vytváření dávky nezdržuje události, pokud je k dispozici méně událostí. Musí být v rozmezí 1 až 5 000.
- Upřednostňovaná velikost dávky v kilobajtech – Cílová horní limit pro velikost dávky v kilobajtech. Podobně jako u maximálních 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 doručí do Event Grid, událost o velikosti 10 kB se stále doručí ve vlastní dávce, a nebude se zahozena.
Dávkové doručování nakonfigurované pro odběry pro každou událost prostřednictvím portálu, rozhraní příkazového řádku, PowerShellu nebo sdk.
Chování dávkování
Vše nebo žádné
Event Grid funguje se sémantikou typu all-or-none. Nepodporuje částečný úspěch dávkového doručování. Předplatitelé by měli pečlivě požádat o tolik událostí na dávku, kolik jich dokáže přiměřeně zpracovat za 60 sekund.
Optimistické dávkování
Nastavení zásad dávkování nejsou striktní omezení chování při dávkování a jsou respektována na základě maximálního úsilí. Při nízkých rychlostech událostí často pozorujete, že velikost dávky je menší než požadovaná maximální počet událostí na dávku.
Výchozí hodnota je vypnutá.
Ve výchozím nastavení Event Grid každé žádosti o doručení pouze jednu událost. Způsob, jak zapnout dávkování, je nastavit jedno z nastavení uvedených dříve v článku ve formátu JSON odběru události.
Výchozí hodnoty
Při vytváření odběru událostí není nutné zadat nastavení (Maximální počet událostí na dávku i Přibližná velikost dávky v kilobajtech). Pokud je nastaveno pouze jedno nastavení, Event Grid výchozí hodnoty (konfigurovatelné). V následujících částech najdete výchozí hodnoty a informace o tom, jak je přepsat.
Azure Portal:

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 v rozmezí 1 až 5 000.
- preferred-batch-size-in-kilobytes – upřednostňovaná velikost dávky v kilobajtech. Musí to být číslo v rozmezí 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žití Azure CLI s rozhraním Event Grid 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í
Jako koncový bod dojde k selháním doručení, Event Grid začnou zpozdit doručování a opakování událostí do tohoto koncového bodu. Pokud například selže prvních 10 událostí publikovaných do koncového bodu, bude Event Grid předpokládat, že u koncového bodu dochází k problémům, a po nějakou dobu zpozdí všechna 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é není v pořádku, a Event Grid systému. Bez odstavování a zpoždění doručování koncovým bodům, které nejsou v pořádku, Event Grid zásady opakování a možnosti svazku snadno zahltit systém.
Události dead-letter
Pokud Event Grid během určitého časového období nebo po pokusu o doručení události určitý počet událostí, může nedoručená událost odeslat do účtu úložiště. Tento proces se označuje jako dead-lettering. Event Grid události, pokud je splněna jedna z následujících podmínek.
- Událost se doručí v rámci období TT (Time to Live).
- Počet pokusů o doručení události překročil limit.
Pokud je splněna která z těchto podmínek, událost se zahodí nebo se zahodí. Ve výchozím Event Grid nezapnout funkci dead-lettering. Pokud ho chcete povolit, musíte zadat účet úložiště pro uchovávání nedoručovaných událostí při vytváření odběru událostí. Vyžádáte si události z tohoto účtu úložiště, abyste mohli vyřešit dodávky.
Event Grid pošle událost do umístění nedoručených zpráv, když se pokusí všechny jeho pokusy opakovat. Pokud Event Grid obdrží kód odpovědi 400 (špatný požadavek) nebo 413 (příliš velký požadavek na entitu požadavku), okamžitě naplánuje událost pro nedoručené zprávy. Tyto kódy odpovědí ukazují, že doručení události nebude nikdy úspěšné.
Doba do živého vypršení platnosti se kontroluje jenom při příštím naplánovaném pokusu o doručení. Takže i v případě, že doba do provozu vyprší před dalším plánovaným pokusem o doručení, je tato událost kontrolována pouze v okamžiku příštího doručení a následně v nedoručených písmenech.
Poslední pokus o doručení události a při jejím doručování do umístění nedoručených zpráv je prodleva pět minut. Účelem tohoto zpoždění je snížit počet operací úložiště objektů BLOB. Pokud umístění nedoručených zpráv není k dispozici po dobu čtyř hodin, událost se zahozena.
Před nastavením umístění nedoručených zpráv musíte mít účet úložiště s kontejnerem. Koncový bod pro tento kontejner zadáte při vytváření odběru události. Koncový bod je ve formátu: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>
Po odeslání události do umístění nedoručených zpráv možná budete chtít být upozorněni. Pokud chcete použít Event Grid k reakci 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ě BLOB nedoručených zpráv obdrží nedoručenou událost, Event Grid upozorní vaši obslužnou rutinu. Obslužná rutina reaguje na akce, které chcete provést pro sjednocení nedoručených událostí. Příklad nastavení umístění nedoručených zpráv a zásad opakování najdete v tématu zásady pro nedoručené dopisy a opakování.
Formáty událostí doručení
V této části najdete příklady událostí a nedoručených událostí v různých formátech schématu doručení (Event Grid schéma, schéma CloudEvents 1,0 a vlastní schéma). Další informace o těchto formátech najdete v článku Event Grid schématu a cloudové události 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" }
}
}
Nedoručená událost
{
"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"
}
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
}
}
Nedoručená 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
},
"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"
}
Nedoručená událost
{
"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 potvrzení přijetí událostí kódy odpovědí HTTP.
Kódy úspěchu
Event Grid považuje za úspěšné doručení pouze následující kódy odpovědí HTTP. Všechny ostatní stavové kódy se považují za neúspěšné doručení a v případě potřeby se budou opakovat nebo deadlettered. Po přijetí úspěšného stavového kódu Event Grid považuje doručení za dokončenou.
- 200 OK
- 201 vytvořeno
- 202 přijato
- 203 neautoritativní informace
- 204 bez obsahu
Kódy chyb
Všechny ostatní kódy, které nejsou ve výše uvedené sadě (200-204), se považují za selhání a v případě potřeby se zopakují. Některé mají konkrétní zásady opakování, které jsou pro ně vázané níže. všechny ostatní se řídí standardním exponenciálním modelem. Je důležité mít na paměti, že kvůli vysoce paralelismuější povaze architektury Event Grid není chování při opakování deterministické.
| Stavový kód | Chování opakování |
|---|---|
| 400 – Chybný požadavek | Nepokusit se znovu |
| 401 – Neautorizováno | Zkuste to znovu za 5 minut nebo více pro koncové body prostředků Azure. |
| 403 – Zakázáno | Nepokusit se znovu |
| 404 Nenalezeno | Zkuste to znovu za 5 minut nebo více pro koncové body prostředků Azure. |
| 408 – Časový limit žádosti | Opakovat po 2 nebo více minutách |
| Entita požadavku 413 je moc velká. | Nepokusit se znovu |
| 503 – Nedostupná služba | Opakovat po 30 sekundách nebo více |
| Všichni ostatní | Opakovat po 10 sekundách nebo více |
Vlastní vlastnosti doručování
Odběry událostí umožňují nastavit hlavičky protokolu HTTP, které jsou zahrnuté v doručených událostech. Tato funkce umožňuje nastavit vlastní hlavičky, které jsou vyžadovány cílem. Při vytváření odběru událostí můžete nastavit až 10 hlaviček. Každá hodnota hlavičky by neměla být větší než 4 096 (4K) bajtů. Můžete nastavit vlastní hlavičky pro události, které jsou dodány do následujících umístění:
- Webhooky
- témata a fronty pro Azure Service Bus
- Azure Event Hubs
- Hybrid Connections přenosu
Další informace najdete v tématu vlastní vlastnosti doručování.
Další kroky
- Pokud chcete zobrazit stav doručení událostí, přečtěte si téma monitorování Event Grid doručování zpráv.
- Pokud chcete přizpůsobit možnosti doručení událostí, přečtěte si téma zásady nedoručených zpráv a opakování.