Doručování zpráv Event Gridu a opakování

Event Grid poskytuje trvalé doručení. Pokusí se doručit každou zprávu aspoň jednou pro každý odpovídající odběr okamžitě. Pokud koncový bod odběratele nepotvrdí přijetí události nebo dojde k selhání, Event Grid se pokusí o doručení na základě pevného plánu opakování a zásad opakování. Ve výchozím nastavení Event Grid doručuje odběrateli jednu událost po druhé. 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 obdržet mimo pořadí.

Plán opakování

Když Event Grid obdrží chybu při pokusu o doručení události, rozhodne se, jestli se má opakovat doručení, nedoručenou událost nebo událost zahodit na základě typu chyby.

Pokud je chyba vrácená odebíraným koncovým bodem chyba související s konfigurací, kterou není možné vyřešit opakovanými pokusy (například při odstranění koncového bodu), Event Grid buď u události provede nedoručené zprávy, nebo událost zahodí, pokud není nakonfigurovaná nedoručitelnost.

Následující tabulka popisuje typy koncových bodů a chyby, u kterých k opakování nedochází:

Typ koncového bodu Kódy chyb
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 není pro koncový bod nakonfigurovaná nedoručená zpráva, události se zahodí, když dojde k výše uvedeným chybám. Pokud nechcete, aby se tyto typy událostí zahodily, zvažte konfiguraci nedoručených událostí. Nedoručené události se zahodí, pokud se cíl nedoručených dopisů nenajde.

Pokud chyba vrácená odebíraný koncový bod není ve výše uvedeném seznamu, Event Grid provede opakování pomocí zásad popsaných níže:

Event Grid po doručení zprávy čeká na odpověď 30 sekund. Pokud koncový bod neodpoví, po 30 sekundách se zpráva zasadí do fronty pro opakování. Event Grid používá zásady exponenciálního opakování zpochybnění pro doručování událostí. Event Grid se v maximálním úsilí pokusí o doručení podle následujícího plánu:

  • 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í do 3 minut, Event Grid se pokusí odebrat událost z fronty opakování s maximálním úsilím, ale duplicitní položky se můžou stále přijímat.

Event Grid přidá ke všem krokům opakování malou náhodnost a může oportunisticky přeskočit určitá opakování, pokud je koncový bod trvale v pořádku, dlouhou dobu mimo provoz nebo se zdá, že je zahlcený.

Zásady opakování

Zásady opakování můžete při vytváření odběru událostí přizpůsobit pomocí následujících dvou konfigurací. Událost se zahodí, pokud je dosaženo 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 v rozsahu 1 až 1440. Výchozí hodnota je 1440 minut.

Ukázkové příkazy rozhraní příkazového řádku a PowerShellu ke konfiguraci těchto nastavení najdete v tématu Nastavení zásad opakování.

Poznámka

Pokud nastavíte i Event time to live (TTL)Maximum number of attempts, Služba Event Grid použije k určení, kdy se má zastavit doručování událostí, k vypršení platnosti první. 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čí ani po 30 minutách nebo se nedoručí ani po 5 pokusech (podle toho, co nastane dříve), událost se nedoručí. Pokud nastavíte maximální počet pokusů o doručení na 10, s ohledem na plán exponenciálních opakování dojde k maximálnímu počtu pokusů o doručení před dosažením hodnoty TTL 30 minut, takže nastavení maximálního počtu pokusů na 10 v tomto případě nebude mít žádný vliv a události budou nedoručené po 30 minutách.

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í. Pro zajištění vyššího výkonu PROTOKOLU HTTP ve scénářích s vysokou propustností můžete službu Event Grid nakonfigurovat na dávkové události pro doručování. 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í doručovaných službou Event Grid na dávku. Toto číslo nebude nikdy překročeno, 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 nezpozdí události při vytváření dávky, 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á horní mez pro velikost dávky v kilobajtech. Podobně jako u maximálního počtu 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, událost o velikosti 10 kB se přesto doručí ve vlastní dávce, místo aby se zahodila.

Dávkové doručování v nástroji nakonfigurované na základě odběru pro jednotlivé události 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 se sémantikou typu all-or-none. Nepodporuje částečný úspěch dávkového doručení. Předplatitelé by měli dávat pozor, aby požadovali pouze tolik událostí v dávce, kolik zvládnou přiměřeně za 30 sekund.

  • Optimistické dávkování

    Nastavení zásad dávkování nejsou striktní hranice chování dávkování a jsou respektována s maximálním úsilím. Při nízké četnosti událostí často uvidíte, že velikost dávky je menší než maximální počet požadovaných událostí na dávku.

  • Výchozí nastavení je vypnuté.

    Ve výchozím nastavení Event Grid přidává ke každé žádosti o doručení pouze jednu událost. Dávkování zapnete tak, že nastavíte jedno z nastavení uvedených výše v článku v kódu 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 a Přibližná velikost dávky v kilo bajtů). Pokud je nastaveno pouze jedno nastavení, Event Grid použije (konfigurovatelné) výchozí hodnoty. V následujících částech najdete informace o výchozích hodnotách a jejich přepsání.

Azure Portal:

Tato nastavení se zobrazí na kartě Další funkce na stránce Odběr události .

Snímek obrazovky s kartou Další funkce na stránce Odběr události se zvýrazněným oddílem 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 mezi 1 a 5 000.
  • preferred-batch-size-in-kilobajtů – upřednostňovaná velikost dávky v kilobajtech. Musí to být číslo mezi 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 se službou 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í

Vzhledem k tomu, že u koncového bodu dochází k selhání doručení, začne Event Grid zpožďovat doručení 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, Event Grid předpokládá, že u koncového bodu dochází k problémům, a o určitou dobu zpozdí všechny následné pokusy a nové doručení – v některých případech až několik hodin.

Funkčním účelem zpožděného doručení je ochrana koncových bodů, které nejsou v pořádku, a systému Event Grid. Bez couvnutí 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ého dopisu

Pokud Event Grid nemůže doručit událost v určitém časovém období nebo po pokusu o doručení události s určitým počtem opakování, může neodručenou událost odeslat do účtu úložiště. Tento proces se označuje jako nedoručených dopisů. Nedorucená písmena event gridu při splnění jedné z následujících podmínek.

  • Událost se nedoručí během období TTL (Time to Live ).
  • Počet pokusů o doručení události překročil limit.

Pokud je splněna kterákoliv z podmínek, událost se zahodí nebo nedoručí. Event Grid ve výchozím nastavení nezapne funkci nedoručených dopisů. Pokud ho chcete povolit, musíte zadat účet úložiště, který bude při vytváření odběru událostí uchovávat nedoručené události. Z tohoto účtu úložiště načítáte události, abyste vyřešili doručení.

Když Event Grid zkusí všechny pokusy o opakování, odešle událost do umístění nedoručených dopisů. Pokud Event Grid obdrží kód odpovědi 400 (Chybný požadavek) nebo 413 (Příliš velká entita požadavku), okamžitě naplánuje nedoručitelnost události. Tyto kódy odpovědí znamenají, že doručení události nebude nikdy úspěšné.

Vypršení platnosti hodnoty TTL (Time-to-Live) se kontroluje POUZE při dalším plánovaném pokusu o doručení. Takže i když time-to-live vyprší před dalším plánovaným pokusem o doručení, vypršení platnosti události se zkontroluje až v okamžiku dalšího doručení a následně se zobrazí nedoručené dopisy.

Mezi posledním pokusem o doručení události a jejím doručením na místo nedoručených oznámení je zpoždění pět minut. Účelem tohoto zpoždění je snížit počet operací služby Blob Storage. Pokud je umístění nedoručených oznámení po dobu čtyř hodin nedostupné, událost se zahodí.

Před nastavením umístění nedoručených oznámení musíte mít účet úložiště s kontejnerem. Koncový bod pro tento kontejner zadáte při vytváření odběru událostí. Koncový bod je ve formátu: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>

Můžete chtít být upozorněni, když byla událost odeslána do umístění nedoručených dopisů. Pokud chcete event grid použít k reakci na nedoručené události, vytvořte odběr událostí pro úložiště nedoručených objektů blob. Pokaždé, když vaše úložiště objektů blob nedoručených nedoručených obdrží nedoručené události, Event Grid na to upozorní vaši obslužnou rutinu. Obslužná rutina reaguje akcemi, které chcete provést pro odsouhlasení nedoručených událostí. Příklad nastavení umístění nedoručených oznámení a zásad opakování najdete v tématu Zásady nedoručených oznámení a opakování.

Poznámka

Pokud povolíte správu identity pro nedoručené adresy, budete muset spravovanou identitu přidat do příslušné role řízení přístupu na základě role (RBAC) v účtu služby 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 schématu cloudových událostí 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ého dopisu

{
    "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 Description
NotFound Cílový prostředek se nenašel.
Zakázáno Cíl zakázal příjem událostí. Platí pro Azure Service Bus a Azure Event Hubs.
Do bloku Byl překročen 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 na požadavek.
TimedOut Vypršel časový limit operace doručení.
Obsazeno 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.
Probační Event Grid zasadí cíl do zkušební verze. Během zkušební doby se o doručení nepokusí.
Zrušeno Operace doručení byla zrušena.
Bylo přerušeno Služba Event Grid přerušila doručování po uplynutí časového intervalu.
Chyba soketu 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.
Poskytování Doručování událostí do cíle
SessionQueueNotSupported K pokusu o doručení události bez ID relace dojde u entity, která má povolenou podporu relací. Platí pro cíl entity Azure Service Bus.
Forbidden Cílovému koncovému bodu je zakázáno doručování (může to být kvůli bránám firewall protokolu IP nebo jiným omezením).
NeplatnáazureFunctionDestination Cílová funkce Azure není platná. Pravděpodobně proto, že nemá typ EventGridTrigger.

LastDeliveryOutcome: Zkušební verze

Odběr událostí je službou Event Grid po určitou dobu zastavován do zkušební doby, pokud začnou selháváním doručování událostí do daného cíle. Zkušební doba se liší pro různé chyby vrácené cílovým koncovým bodem. Pokud je odběr událostí ve zkušebním období, může dojít k nedoručení nebo vyřazení událostí bez pokusu o doručení v závislosti na kódu chyby, kvůli kterému je ve zkušebním období.

Chyba Doba trvání zkušební doby
Obsazeno 10 sekund
NotFound 5 minut
Chyba soketu 30 sekund
Chyba řešení 5 minut
Zakázáno 5 minut
Do bloku 5 minut
TimedOut 10 sekund
Neautorizováno 5 minut
Forbidden 5 minut
NeplatnáazureFunctionDestination 10 minut

Poznámka

Event Grid používá zkušební dobu 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ého dopisu

{
    "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ého dopisu

{
    "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é doručení 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 zpomalovat. 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 Žádný obsah

Kódy selhání

Všechny ostatní kódy, které nejsou ve výše uvedené sadě (200–204), se považují za selhání a budou se opakovat (v případě potřeby). Některé mají specifické zásady opakování, které jsou popsány níže, a všechny ostatní se řídí standardním exponenciálním re-off modelem. Je důležité mít na paměti, že vzhledem k vysoce paralelizované povaze architektury Event Gridu je chování opakování ne deterministické.

Stavový kód Chování při opakování
400 – Chybný požadavek Nezopakováno
401 – Neautorizováno U koncových bodů prostředků Azure zkuste to znovu po 5 minutách nebo déle.
403 – Zakázáno Nezopakováno
404 Nenalezeno U koncových bodů prostředků Azure zkuste to znovu po 5 minutách nebo déle.
408 – Časový limit žádosti Zkuste to znovu po 2 minutách nebo déle.
413 – Příliš velká entita požadavku Nezopakováno
503 – Nedostupná služba Zkuste to znovu po 30 sekundách nebo déle.
Všechny 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é cíl vyžaduje. 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ů. U událostí, které se doručují do následujících cílů, můžete nastavit vlastní hlavičky:

  • Webhooky
  • Azure Service Bus témat a front
  • Azure Event Hubs
  • Hybridní připojení služby Relay

Další informace najdete v tématu Vlastní vlastnosti doručení.

Další kroky