Megosztás a következőn keresztül:


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

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 az előfizető végpontja nem nyugtázza az esemény fogadását, vagy ha hiba történik, az Event Grid egy rögzített újrapróbálkozési ütemezés és újrapróbálkozás-szabályzat alapján újrapróbálkozik. Az Event Grid alapértelmezés szerint egyszerre egy eseményt biztosít az előfizetőnek. A hasznos adat azonban egyetlen eseményt tartalmazó tömb.

Feljegyzé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 is 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 újrapróbálkozza-e a kézbesítést, kézbesítetlen-e az esemény, vagy a hiba típusa alapján elveti az eseményt.

Ha az előfizetett végpont által visszaadott hiba konfigurációval kapcsolatos hiba, amely nem javítható újrapróbálkozással (például ha a végpontot törölték), az Event Grid vagy holtbetűsítést hajt végre az eseményen, vagy elveti az eseményt, ha nincs beállítva a holt betű.

Az alábbi táblázat azokat a végpontokat é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érelem), 413 (A kérelem entitása túl nagy)
Webhook 400 (Hibás kérelem), 413 (A kérelem entitása túl nagy), 401 (Jogosulatlan)

Feljegyzés

Ha a holt betű nincs végponthoz konfigurálva, a fenti hibák bekövetkezésekor a rendszer elveti az eseményeket. Fontolja meg a kézbesíthetetlen levelek konfigurálását, ha nem szeretné, hogy az ilyen típusú események el legyenek dobva. A holt betűs eseményeket a rendszer elveti, ha a holtbetűs célhely 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 backoff újrapróbálkozási szabályzatot használ az eseménykézbesítéshez. Az Event Grid az alábbi ütemezés szerint újrapróbálkozásokat hajt végre a legjobb munkamennyiség alapján:

  • 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 eltávolítani az eseményt az újrapróbálkozási üzenetsorból a lehető legjobb erőfeszítéssel, 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, hosszú ideig leáll, 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

A beállítások konfigurálásához a parancssori felület és a PowerShell-parancs mintaparancsát lásd: Újrapróbálkozési szabályzat beállítása.

Feljegyzés

Ha mindkettőt Event time to live (TTL) beállítja, az Maximum number of attemptsEvent Grid az elsőt használja annak meghatározására, hogy mikor állítsa le az eseménykézbesítést. Ha például 30 percet állít be élettartamként (TTL) és 5 maximális kézbesítési kísérletként. Ha egy esemény 30 perc (vagy) után nem lesz kézbesítve 5 kísérlet után, bármelyik is legyen az első, az esemény holt betűs 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 tekintetében 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 után elhalványulnak.

Kimenet kötegelése

Az Event Grid alapértelmezés szerint egyenként küldi el az egyes eseményeket az előfizetőknek. Az előfizető egyetlen eseményt tartalmazó tömböt kap. Az Event Gridet konfigurálhatja úgy, hogy az eseményeket kötegelje a kézbesítéshez a jobb HTTP-teljesítmény érdekében 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 szállított események maximális száma kötegenként. Ezt a számot soha nem lépi túl a rendszer, de kevesebb eseményt lehet kézbesíteni, ha a közzétételkor 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ételkor. Előfordulhat, hogy egy köteg nagyobb az előnyben részesített kötegméretnél , ha egyetlen 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 egy 10 KB-os eseményt küld 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 via the portal, CLI, PowerShell, or SDKs.

Kötegelési viselkedés

  • Az összes vagy egyik sem

    Az Event Grid teljesen vagy egyáltalán nem szemantiká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 csak annyi eseményt kérjenek kötegenként, 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 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 kikapcsolva

    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, ha az esemény-előfizetés JSON-előfizetésében a cikkben említett beállítások valamelyikét beállítja.

  • 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, mind a kötegek 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 funkciók lapján láthatja.

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

Azure CLI

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

  • max-events-per-batch – A 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

Mivel a 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 kézbesí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 kifogástalan végpontok és az Event Grid-rendszer védelme. Az Event Grid újrapróbálkozási szabályzata és mennyiségi képességei könnyen túlterhelhetik a rendszert anélkül, hogy visszalépést és késést okoz a nem megfelelő végpontokra történő kézbesítés.

Holt betűs események

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, a kézbesítetlen eseményt elküldheti egy tárfiókba. Ezt a folyamatot holtbetűsnek nevezzük. Az Event Grid az alábbi feltételek valamelyikének teljesülése esetén holtpontot ad egy eseménynek.

  • Az esemény nem lesz kézbesítve az élőben töltött időszakon 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 elhalt betűvel. Alapértelmezés szerint az Event Grid nem kapcsolja be a levéltovábbítást. 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. 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 levél helyére, amikor az újrapróbálkozási kísérleteit megpróbálta. Ha az Event Grid egy 400 -os (hibás kérés) vagy 413-ás (Túl nagy kérelem entitás) válaszkódot kap, az azonnal beütemezi az eseményt a kézbesíthetetlen levelekhez. 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 az elhalt betűt.

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

A kézbesíthetetlen levelek helyének megadá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íthetetlen levelek helyére küldtek. Ha az Event Grid használatával nem kézbesített eseményekre szeretne válaszolni, 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 meg szeretne tenni a nem kézbesített események egyeztetéséhez. A holt levelek helyének beállítására és az újrapróbálkozásra vonatkozó szabályzatok beállítására példa: Holt betű és újrapróbálkozás szabályzatok.

Feljegyzé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 azon Az Azure Storage-fiókban, amely a kézbesítetlen levelek eseményeit fogja tárolni. 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) példákat mutat be az eseményekre és a kézbesítetlen levelekre. 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" }
    }
}

Holt betűs 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" 
}

Az alábbiakban bemutatjuk a lehetséges értékeket lastDeliveryOutcome és azok leírását.

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. Az Azure Service Bus és az Azure Event Hubs esetében alkalmazható.
Teljes Túllépte a célhelyen engedélyezett műveletek maximális számát. Az Azure Service Bus és az Azure Event Hubs esetében alkalmazható.
Nem engedélyezett A cél nem engedélyezett válaszkódot adott vissza.
BadRequest A cél hibás kérés válaszkódot adott vissza.
IdőtúllépésselMegszakadt 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. Az Azure Service Bus és az Azure Event Hubs esetében alkalmazható.
Próbaidő A célhelyet az Event Grid próbaidőre helyezi. A kézbesítést próbaidő alatt nem kísérlik meg.
Visszavont A kézbesítési művelet megszakítva.
Megszakadt Az Event Grid egy időintervallum után megszakította a kézbesítést.
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éreli meg, amely engedélyezve van a munkamenet-támogatással. Az Azure Service Bus-entitás célhelyére alkalmazható.
Forbidden A célvégpont tiltja a kézbesítést (lehet, hogy IP-tűzfalak vagy egyéb korlátozások miatt)
InvalidAzureFunctionDestination 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 állít be 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, előfordulhat, hogy az eseményeket a próbaidő alatt lévő hibakódtól függően nem is próbálják meg kézbesíteni vagy elvetni.

Hiba Próbaidő időtartama
Foglalt 10 másodperc
NotFound 5 perc
SocketError 30 másodperc
ResolutionError 5 perc
Disabled (Letiltva) 5 perc
Teljes 5 perc
IdőtúllépésselMegszakadt 10 másodperc
Nem engedélyezett 5 perc
Forbidden 5 perc
InvalidAzureFunctionDestination 10 perc

Feljegyzés

Az Event Grid a próbaidőt használja a jobb kézbesítéskezelés érdekében, é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
    }
}

Holt betűs 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"
}

Holt betűs 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 a rendszer szükség szerint újrapróbálkozott vagy holtpontra kerül. 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 készletben nem szereplő összes többi kód (200-204) sikertelennek minősül, és újra próbálkozik (ha szükséges). Vannak, amelyekhez konkrét újrapróbálkozási szabályzatok kapcsolódnak, és mindegyik a standard exponenciális háttérmodellt követi. 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érés Nincs újrapróbálkozott
401 Nem engedélyezett Újrapróbálkozás 5 perc vagy több után az Azure Resources-végpontok esetében
403 – Tiltott Nincs újrapróbálkozott
404 Nem található Újrapróbálkozás 5 perc vagy több után az Azure Resources-végpontok esetében
408 Kérés időtúllépése Újrapróbálkozás 2 perc vagy több után
413 Kérelem entitás túl nagy 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. Az egyéni fejléceket a következő célhelyekre kézbesített eseményeken állíthatja be:

  • Webhookok
  • Azure Service Bus-témakörök és üzenetsorok
  • Azure-eseményközpontok
  • Hibrid relay kapcsolatok

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

Következő lépések