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í.

Snímek obrazovky s kartou Další funkce na stránce Odběr událostí se zvýrazněnou částí Dávkování

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í.