Event Grid-üzenetek kézbesítése és újrapróbálkozás

Az Event Grid tartós kézbesítést biztosít. Minden egyező előfizetéshez legalább egyszer megpróbálja elküldeni az egyes üzeneteket. Ha egy előfizető végpontja nem nyugtáz egy esemény fogadását, vagy ha hiba történik, az Event Grid egy rögzített újrapróbálkozás-ütemezés és újrapróbálkozás-szabályzat alapján újrapróbálkozást rendel hozzá a kézbesítéshez. Alapértelmezés szerint az Event Grid egyszerre egy eseményt biztosít az előfizetőnek. A hasznos adat azonban egy egyetlen eseményt tartalmazó tömb.

Megjegyzés

Az Event Grid nem garantálja az eseménykézbesítés megrendelését, így az előfizetők rendelésen kívül megkaphatják őket.

Újrapróbálkozás ütemezése

Amikor az Event Grid hibaüzenetet kap egy eseménykézbesítési kísérlethez, az Event Grid eldönti, hogy újra meg kell-e próbálnia a kézbesítést, kézbesíthetetlennek kell-e lennie az eseménynek, vagy a hiba típusa alapján elveti az eseményt.

Ha az előfizetett végpont által visszaadott hiba egy konfigurációval kapcsolatos hiba, amelyet újrapróbálkozással nem lehet kijavítani (például ha a végpont törölve van), az Event Grid vagy kézbesítetlen betűket végez az eseményen, vagy elveti az eseményt, ha a kézbesítetlen levél nincs konfigurálva.

Az alábbi táblázat azokat a végponttípusokat és hibákat ismerteti, amelyeknél az újrapróbálkozás nem történik meg:

Végpont típusa Hibakódok
Azure-erőforrások 400 (Hibás kérés), 413 (A kérelem entitás túl nagy)
Webhook 400 (Hibás kérés), 413 (A kérelem entitás túl nagy), 401 (Jogosulatlan)

Megjegyzés

Ha a kézbesítetlen levelek nincsenek végponthoz konfigurálva, a fenti hibák bekövetkezésekor a rendszer elveti az eseményeket. Fontolja meg a kézbesítetlen levelek konfigurálását, ha nem szeretné, hogy az ilyen típusú eseményeket elvetje. A kézbesítetlen levelek eseményeit a rendszer elveti, ha a kézbesítetlen levelek célhelye nem található.

Ha az előfizetett végpont által visszaadott hiba nem szerepel a fenti listán, az Event Grid az alábbi szabályzattal hajtja végre az újrapróbálkozásokat:

Az Event Grid 30 másodpercet vár a válaszra az üzenet kézbesítése után. 30 másodperc elteltével, ha a végpont nem válaszolt, az üzenet újrapróbálkozáshoz várólistára kerül. Az Event Grid exponenciális visszalépési újrapróbálkozási szabályzatot használ az eseménykézbesítéshez. Az Event Grid a lehető legjobb erőfeszítéssel újrapróbálkozásokat végez a következő ütemezés szerint:

  • 10 másodperc
  • 30 másodperc
  • 1 perc
  • 5 perc
  • 10 perc
  • 30 perc
  • 1 óra
  • 3 óra
  • 6 óra
  • 12 óránként legfeljebb 24 óránként

Ha a végpont 3 percen belül válaszol, az Event Grid megpróbálja a lehető legjobb erőfeszítéssel eltávolítani az eseményt az újrapróbálkozási üzenetsorból, de előfordulhat, hogy az ismétlődések továbbra is érkeznek.

Az Event Grid kis véletlenszerűsítést ad az újrapróbálkozási lépésekhez, és opportunista módon kihagyhat bizonyos újrapróbálkozásokat, ha egy végpont folyamatosan nem kifogástalan állapotú, hosszú ideig nem áll le, vagy túlterheltnek tűnik.

Újrapróbálkozási szabályzat

Az újrapróbálkozással kapcsolatos szabályzatot az alábbi két konfigurációval szabhatja testre egy esemény-előfizetés létrehozásakor. A rendszer elvet egy eseményt, ha eléri az újrapróbálkozási szabályzat egyik korlátját.

  • Kísérletek maximális száma – Az értéknek 1 és 30 közötti egész számnak kell lennie. Az alapértelmezett érték 30.
  • Esemény élettartamának (TTL) – Az értéknek 1 és 1440 közötti egész számnak kell lennie. Az alapértelmezett érték 1440 perc

Ha a parancssori felület és a PowerShell-parancs mintáját szeretné konfigurálni ezekre a beállításokra, olvassa el az Újrapróbálkozési szabályzat beállítása című témakört.

Megjegyzés

Ha a és Maximum number of attemptsa beállítást is Event time to live (TTL) beállítja, az Event Grid az elsőt használja a lejárathoz annak meghatározásához, hogy mikor állítsa le az eseménykézbesítést. Ha például 30 percet állít be élettartam (TTL) és 5 maximális kézbesítési kísérletként. Ha egy esemény 30 perc elteltével (vagy) nem lesz kézbesítve 5 kísérlet után, amelyik előbb történik, az esemény kézbesítetlen lesz. Ha a maximális kézbesítési kísérleteket 10-re állítja be, az exponenciális újrapróbálkozási ütemezés figyelembevételével legfeljebb 6 kézbesítési kísérlet történik 30 perccel a TTL elérése előtt, ezért a kísérletek maximális számának 10-re történő beállítása ebben az esetben nem lesz hatással, és az események 30 perc elteltével kézbesíthetetlenek lesznek.

Kimenet kötegelése

Az Event Grid alapértelmezés szerint egyenként küldi el az eseményeket az előfizetőknek. Az előfizető egyetlen eseményt tartalmazó tömböt kap. Az Event Gridet úgy konfigurálhatja, hogy az eseményeket kötegelten kézbesítse, így nagyobb HTTP-teljesítményt érhet el a nagy átviteli sebességű forgatókönyvekben. A kötegelés alapértelmezés szerint ki van kapcsolva, és előfizetésenként bekapcsolható.

Kötegelési szabályzat

A kötegelt kézbesítés két beállítással rendelkezik:

  • Események maximális száma kötegenként – Az Event Grid által kötegenként kézbesített események maximális száma. Ezt a számot soha nem lépi túl a rendszer, azonban kevesebb eseményt lehet kézbesíteni, ha a közzététel időpontjában nem érhetők el más események. Az Event Grid nem késlelteti az eseményeket egy köteg létrehozásához, ha kevesebb esemény érhető el. 1 és 5000 között kell lennie.
  • Előnyben részesített kötegméret kilobájtban – A kötegméret célplafonja kilobájtban. A maximális eseményekhez hasonlóan a köteg mérete is kisebb lehet, ha több esemény nem érhető el a közzététel időpontjában. Előfordulhat, hogy egy köteg nagyobb az előnyben részesített kötegméretnél , ha egy esemény nagyobb az előnyben részesített méretnél. Ha például az előnyben részesített méret 4 KB, és a rendszer leküld egy 10 KB-os eseményt az Event Gridbe, a 10 KB-os esemény továbbra is a saját kötegében lesz kézbesítve, nem pedig elvetve.

Batched delivery in configured on a event subscription basis on the portal, CLI, PowerShell vagy SDKs.

Kötegelési viselkedés

  • Mind vagy nincs

    Az Event Grid teljesen vagy egyáltalán nem szemantika használatával működik. Nem támogatja a kötegelt kézbesítés részleges sikerességét. Az előfizetőknek óvatosnak kell lenniük, hogy kötegenként csak annyi eseményt kérjenek, amennyit 30 másodperc alatt ésszerűen kezelhetnek.

  • Optimista kötegelés

    A kötegelési szabályzat beállításai nem szigorúak a kötegelési viselkedéshez, és a lehető legjobb munkamennyiség alapján vannak tiszteletben tartva. Alacsony eseményarány esetén gyakran megfigyelheti, hogy a köteg mérete kisebb, mint a kötegenként kért maximális események száma.

  • Az alapértelmezett érték KI értékre van állítva

    Alapértelmezés szerint az Event Grid csak egy eseményt ad hozzá minden kézbesítési kérelemhez. A kötegelés bekapcsolásának módja az esemény-előfizetés JSON-jában korábban említett beállítások egyikének beállítása.

  • Alapértelmezett értékek

    Az esemény-előfizetés létrehozásakor nem szükséges megadni mind a beállításokat (kötegenkénti maximális eseményeket és a kötegméret hozzávetőleges méretét kilobájtban). Ha csak egy beállítás van beállítva, az Event Grid (konfigurálható) alapértelmezett értékeket használ. Az alapértelmezett értékekről és azok felülbírálásáról az alábbi szakaszokban olvashat.

Azure Portal:

Ezeket a beállításokat az Esemény-előfizetés lap További szolgáltatások lapján láthatja.

Képernyőkép az Esemény-előfizetés lap További funkciók lapjáról, kiemelt Kötegelés szakaszsal.

Azure CLI

Esemény-előfizetés létrehozásakor használja a következő paramétereket:

  • max-events-per-batch – Egy kötegben lévő események maximális száma. 1 és 5000 közötti számnak kell lennie.
  • preferred-batch-size-in-kilobytes – Előnyben részesített kötegméret kilobájtban. 1 és 1024 közötti számnak kell lennie.
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

Az Azure CLI és az Event Grid használatával kapcsolatos további információkért lásd: Tárolási események átirányítása webes végpontra az Azure CLI-vel.

Késleltetett kézbesítés

Amikor egy végpont kézbesítési hibákat tapasztal, az Event Grid elkezdi késleltetni az események kézbesítését és újrapróbálkozását az adott végpontra. Ha például a végponton közzétett első 10 esemény meghiúsul, az Event Grid feltételezi, hogy a végpont problémákat tapasztal, és az összes későbbi újrapróbálkozást és új szállítást egy ideig késlelteti – bizonyos esetekben akár több órát is.

A késleltetett teljesítés funkcionális célja a nem megfelelő állapotú végpontok és az Event Grid-rendszer védelme. Az Event Grid újrapróbálkozási szabályzata és mennyiségi képességei egyszerűen túlterhelhetik a rendszert anélkül, hogy visszalépést és késést okoz a nem kifogástalan állapotú végpontok felé történő kézbesítés.

Kézbesítetlen levelek eseményei

Ha az Event Grid egy adott időszakon belül nem tud eseményt kézbesíteni, vagy ha bizonyos számú alkalommal próbálja kézbesíteni az eseményt, akkor a kézbesítetlen eseményt egy tárfiókba is elküldheti. Ezt a folyamatot kézbesíthetetlen levélként ismerjük. Az Event Grid nem küldi el az eseményt, ha az alábbi feltételek valamelyike teljesül.

  • Az esemény nem lesz kézbesítve az élőben töltött időn belül.
  • Az esemény kézbesítésére tett próbálkozások száma túllépte a korlátot.

Ha valamelyik feltétel teljesül, az esemény el lesz dobva vagy kézbesítetlen lesz. Alapértelmezés szerint az Event Grid nem kapcsolja be a kézbesítetlen betűket. Az engedélyezéshez meg kell adnia egy tárfiókot a nem kézbesített események tárolásához az esemény-előfizetés létrehozásakor. Ebből a tárfiókból lekérheti az eseményeket a szállítások feloldásához.

Az Event Grid egy eseményt küld a kézbesítetlen levelek helyére, amikor az összes újrapróbálkozási kísérletét megpróbálta. Ha az Event Grid egy 400 -os (hibás kérés) vagy 413 -os (Request Entity Too Large) válaszkódot kap, az azonnal kézbesítetlen levelekre ütemezi az eseményt. Ezek a válaszkódok azt jelzik, hogy az esemény kézbesítése soha nem fog sikerülni.

Az élettartam lejárata CSAK a következő ütemezett kézbesítési kísérletnél van bejelölve. Így még akkor is, ha az élettartam a következő ütemezett kézbesítési kísérlet előtt lejár, az esemény lejáratát csak a következő kézbesítéskor ellenőrzi a rendszer, majd kézbesítetlenül.

Öt perces késés van az esemény utolsó kézbesítési kísérlete és a kézbesítetlen levelek helyére történő kézbesítése között. Ez a késleltetés a Blob Storage-műveletek számának csökkentésére szolgál. Ha a kézbesítetlen levelek helye négy órán keresztül nem érhető el, a program elveti az eseményt.

A kézbesítetlen levelek helyének beállítása előtt rendelkeznie kell egy tárolóval rendelkező tárfiókkal. Az esemény-előfizetés létrehozásakor meg kell adnia a tároló végpontját. A végpont formátuma a következő: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>

Előfordulhat, hogy értesítést szeretne kapni, ha egy eseményt a kézbesítetlen levelek helyére küldtek. Ha az Event Grid használatával szeretne válaszolni a kézbesítetlen eseményekre, hozzon létre egy esemény-előfizetést a kézbesítetlen blobtárolóhoz. Minden alkalommal, amikor a kézbesítetlen blobtároló kézbesítetlen eseményt kap, az Event Grid értesíti a kezelőt. A kezelő olyan műveletekkel válaszol, amelyeket a nem kézbesített események egyeztetéséhez szeretne végrehajtani. A kézbesítetlen levelek helyének beállítására és az újrapróbálkozásra vonatkozó szabályzatok beállítására példa: Kézbesítetlen levelekre és újrapróbálkozásra vonatkozó szabályzatok.

Megjegyzés

Ha engedélyezi a felügyelt identitást a kézbesítetlen levelekhez, hozzá kell adnia a felügyelt identitást a megfelelő szerepköralapú hozzáférés-vezérlési (RBAC) szerepkörhöz a kézbesítetlen levelek eseményeit tartalmazó Azure Storage-fiókban. További információ: Támogatott célhelyek és Azure-szerepkörök.

Kézbesítési eseményformátumok

Ez a szakasz különböző kézbesítési sémaformátumokban (Event Grid-séma, CloudEvents 1.0-séma és egyéni séma) lévő eseményeket és kézbesítetlen levelekből álló eseményeket mutat be. További információ ezekről a formátumokról: Event Grid-séma és Cloud Events 1.0 sémacikkek .

Event Grid-séma

Esemény

{
    "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" }
    }
}

Kézbesíthetetlen esemény

{
    "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" 
}

Íme a lehetséges értékek lastDeliveryOutcome és azok leírása.

LastDeliveryOutcome Leírás
NotFound A célerőforrás nem található.
Disabled (Letiltva) A célhely letiltotta az események fogadását. Alkalmazható Azure Service Bus és Azure Event Hubs.
Összes Túllépte a célhelyen engedélyezett műveletek maximális számát. Alkalmazható Azure Service Bus és Azure Event Hubs.
Nem engedélyezett A cél jogosulatlan válaszkódot adott vissza.
BadRequest A cél hibás kérés válaszkódot adott vissza.
Időtúllépés A kézbesítési művelet túllépte az időkorlátot.
Foglalt A célkiszolgáló foglalt.
PayloadTooLarge Az üzenet mérete túllépte a cél által megengedett maximális méretet. Alkalmazható Azure Service Bus és Azure Event Hubs.
Próbaidő A célhelyet az Event Grid próbaidőre helyezi. A próbaidő alatt nem kísérlik meg a kézbesítést.
Megszakítva A kézbesítési művelet megszakadt.
Megszakítva A kézbesítést az Event Grid megszakította egy időintervallum után.
SocketError Hálózati kommunikációs hiba történt a kézbesítés során.
ResolutionError A célvégpont DNS-feloldása nem sikerült.
Szállít Események kézbesítése a célhelyre.
SessionQueueNotSupported A munkamenet-azonosító nélküli eseménykézbesítést egy olyan entitáson kísérli meg a rendszer, amelynek engedélyezve van a munkamenet-támogatás. Alkalmazható Azure Service Bus entitás céljára.
Forbidden A célvégpont tiltja a kézbesítést (az IP-tűzfalak vagy más korlátozások miatt lehet)
ÉrvénytelenAzureFunctionDestination A cél Azure-függvény érvénytelen. Valószínűleg azért, mert nem rendelkezik EventGridTrigger típussal.

LastDeliveryOutcome: Próbaidő

Az Event Grid egy ideig próbaidőre próbaidőre kivesz egy esemény-előfizetést, ha az adott célhelyre irányuló eseményszállítások meghiúsulnak. A próbaidő eltérő a célvégpont által visszaadott különböző hibák esetén. Ha egy esemény-előfizetés próbaidő alatt van, az események kézbesíthetetlenek vagy elvethetők anélkül, hogy megpróbálná a kézbesítést attól függően, hogy melyik hibakód miatt van próbaidő alatt.

Hiba Próbaidő
Foglalt 10 másodperc
NotFound 5 perc
SocketError 30 másodperc
ResolutionError 5 perc
Disabled (Letiltva) 5 perc
Összes 5 perc
Időtúllépés 10 másodperc
Nem engedélyezett 5 perc
Forbidden 5 perc
ÉrvénytelenAzureFunctionDestination 10 perc

Megjegyzés

Az Event Grid próbaidőt használ a jobb kézbesítéskezeléshez, és az időtartam a jövőben változhat.

CloudEvents 1.0 séma

Esemény

{
    "id": "caee971c-3ca0-4254-8f99-1395b394588e",
    "source": "mysource",
    "dataversion": "1.0",
    "subject": "mySubject",
    "type": "fooEventType",
    "datacontenttype": "application/json",
    "data": {
        "prop1": "value1",
        "prop2": 5
    }
}

Kézbesíthetetlen esemény

{
    "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",
}

Egyéni séma

Esemény

{
    "prop1": "my property",
    "prop2": 5,
    "myEventType": "fooEventType"
}

Kézbesíthetetlen esemény

{
    "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"
    }
}

Üzenetkézbesítés állapota

Az Event Grid HTTP-válaszkódokkal nyugtázza az események fogadását.

Sikerkódok

Az Event Grid csak a következő HTTP-válaszkódokat tekinti sikeres kézbesítésnek. Az összes többi állapotkód sikertelen kézbesítésnek minősül, és szükség szerint újrapróbálkoznak vagy leállnak. Ha az Event Grid sikeres állapotkódot kap, a kézbesítést befejezettnek tekinti.

  • 200 OK
  • 201 Létrehozva
  • 202 Elfogadva
  • 203 Nem mérvadó információk
  • 204 Nincs tartalom

Hibakódok

A fenti készletben (200-204) nem szereplő összes többi kód hibának minősül, és újrapróbálkozott (ha szükséges). Vannak, amelyekhez konkrét újrapróbálkozási szabályzatok kapcsolódnak alább, mások a standard exponenciális visszalépési modellt követik. Fontos szem előtt tartani, hogy az Event Grid architektúrájának nagymértékben párhuzamos jellege miatt az újrapróbálkozási viselkedés nem determinisztikus.

Állapotkód Újrapróbálkozás viselkedése
400 Hibás kérelem Nincs újrapróbálkozott
401 Nem engedélyezett Újrapróbálkozás 5 perc vagy több után az Azure-erőforrások végpontjainál
403 – Tiltott Nincs újrapróbálkozott
404 Nem található Újrapróbálkozás 5 perc vagy több után az Azure-erőforrások végpontjainál
408 Kérés időtúllépése Újrapróbálkozás 2 perc vagy több után
413 Túl nagy kérelem entitása Nincs újrapróbálkozott
503 A szolgáltatás nem érhető el Újrapróbálkozás 30 másodperc vagy több után
Minden más Újrapróbálkozás 10 másodperc vagy több után

Egyéni kézbesítési tulajdonságok

Az esemény-előfizetések lehetővé teszik a kézbesített eseményekben szereplő HTTP-fejlécek beállítását. Ez a funkció lehetővé teszi a célhoz szükséges egyéni fejlécek beállítását. Esemény-előfizetés létrehozásakor legfeljebb 10 fejlécet állíthat be. Az egyes fejlécértékek nem lehetnek nagyobbak 4096 (4K) bájtnál. Egyéni fejléceket a következő célhelyekre kézbesített eseményeken állíthat be:

  • Webhookok
  • témakörök és üzenetsorok Azure Service Bus
  • Azure Event Hubs
  • Hibrid kapcsolatok továbbítása

További információ: Egyéni kézbesítési tulajdonságok.

Következő lépések