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:

Nastavení dávkového doručová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 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