Share via


Event Grid-berichtbezorging en opnieuw proberen

Event Grid biedt duurzame levering. Er wordt geprobeerd om elk bericht ten minste één keer te bezorgen voor elk overeenkomend abonnement. Als het eindpunt van een abonnee de ontvangst van een gebeurtenis niet bevestigt of als er een fout optreedt, probeert Event Grid de levering opnieuw op basis van een vast schema voor opnieuw proberen en beleid voor opnieuw proberen. Standaard levert Event Grid één gebeurtenis tegelijk aan de abonnee. De nettolading is echter een matrix met één gebeurtenis.

Notitie

Event Grid garandeert geen order voor levering van gebeurtenissen, zodat abonnees ze mogelijk niet in orde kunnen ontvangen.

Schema voor opnieuw proberen

Wanneer Event Grid een fout ontvangt voor een poging tot bezorging van gebeurtenissen, bepaalt Event Grid of de gebeurtenis opnieuw moet worden bezorgd, de dode letter van de gebeurtenis of de gebeurtenis moet worden neergeschoten op basis van het type fout.

Als de fout die wordt geretourneerd door het geabonneerde eindpunt een configuratiefout is die niet kan worden opgelost met nieuwe pogingen (bijvoorbeeld als het eindpunt wordt verwijderd), voert Event Grid dead-lettering uit op de gebeurtenis of zet de gebeurtenis neer als er geen dode letter is geconfigureerd.

In de volgende tabel worden de typen eindpunten en fouten beschreven waarvoor het opnieuw proberen niet plaatsvindt:

Eindpunttype Foutcodes
Azure-bronnen 400 (ongeldige aanvraag), 413 (aanvraagentiteit is te groot)
Webhook 400 (ongeldige aanvraag), 413 (aanvraagentiteit is te groot), 401 (niet geautoriseerd)

Notitie

Als dode letter niet is geconfigureerd voor een eindpunt, worden gebeurtenissen verwijderd wanneer de bovenstaande fouten optreden. Overweeg om dead-letter te configureren als u niet wilt dat dit soort gebeurtenissen worden verwijderd. Dode gebeurtenissen worden verwijderd wanneer de bestemming van de dode letter niet wordt gevonden.

Als de fout die wordt geretourneerd door het geabonneerde eindpunt zich niet in de bovenstaande lijst bevindt, voert Event Grid de nieuwe poging uit met behulp van het hieronder beschreven beleid:

Event Grid wacht 30 seconden op een reactie na het bezorgen van een bericht. Als het eindpunt na 30 seconden niet heeft gereageerd, wordt het bericht in de wachtrij geplaatst om het opnieuw te proberen. Event Grid maakt gebruik van een beleid voor exponentieel uitstel voor opnieuw proberen voor het leveren van gebeurtenissen. Event Grid probeert de levering volgens de volgende planning opnieuw uit te voeren op basis van best effort:

  • 10 seconden
  • 30 seconden
  • 1 minuut
  • 5 minuten
  • 10 minuten
  • 30 minuten
  • 1 uur
  • 3 uur
  • 6 uur
  • Elke 12 uur tot 24 uur

Als het eindpunt binnen 3 minuten reageert, probeert Event Grid de gebeurtenis te verwijderen uit de wachtrij voor opnieuw proberen, maar er kunnen nog steeds duplicaten worden ontvangen.

Event Grid voegt een kleine randomisatie toe aan alle stappen voor opnieuw proberen en kan bepaalde nieuwe pogingen opportunistisch overslaan als een eindpunt consistent beschadigd is, gedurende een lange periode uitvalt of overweldigd lijkt te zijn.

Beleid voor opnieuw proberen

U kunt het beleid voor opnieuw proberen aanpassen bij het maken van een gebeurtenisabonnement met behulp van de volgende twee configuraties. Er wordt een gebeurtenis verwijderd als een van de limieten van het beleid voor opnieuw proberen is bereikt.

  • Maximum aantal pogingen : de waarde moet een geheel getal tussen 1 en 30 zijn. De standaardwaarde is 30.
  • Time-to-live (TTL) voor gebeurtenissen: de waarde moet een geheel getal tussen 1 en 1440 zijn. De standaardwaarde is 1440 minuten

Zie Beleid voor opnieuw proberen instellen voor voorbeeld-CLI en PowerShell om deze instellingen te configureren.

Notitie

Als u beide Event time to live (TTL) instelt en Maximum number of attemptsEvent Grid de eerste gebruikt om te verlopen om te bepalen wanneer de levering van gebeurtenissen moet worden gestopt. Als u bijvoorbeeld 30 minuten instelt als time-to-live (TTL) en 5 maximale bezorgingspogingen. Wanneer een gebeurtenis na 30 minuten (of) niet wordt bezorgd na 5 pogingen, afhankelijk van wat zich het eerst voordoet, wordt de gebeurtenis in een dode letter weergegeven. Als u maximaal aantal bezorgingspogingen instelt op 10, met betrekking tot het schema voor exponentieel opnieuw proberen, worden maximaal 6 bezorgingspogingen uitgevoerd voordat 30 minuten TTL wordt bereikt. Het instellen van het maximum aantal pogingen tot 10 heeft in dit geval geen invloed en gebeurtenissen worden na 30 minuten doodgeletterd.

Batchverwerking van uitvoer

Event Grid verzendt standaard elke gebeurtenis afzonderlijk naar abonnees. De abonnee ontvangt een matrix met één gebeurtenis. U kunt Event Grid configureren voor batchgebeurtenissen voor levering voor verbeterde HTTP-prestaties in scenario's met hoge doorvoer. Batchverwerking is standaard uitgeschakeld en kan per abonnement worden ingeschakeld.

Batchverwerkingsbeleid

Batched delivery heeft twee instellingen:

  • Maximum aantal gebeurtenissen per batch : het maximum aantal gebeurtenissen dat Event Grid per batch levert. Dit aantal wordt nooit overschreden, maar er kunnen minder gebeurtenissen worden geleverd als er geen andere gebeurtenissen beschikbaar zijn op het moment van publiceren. Event Grid vertraagt gebeurtenissen niet om een batch te maken als er minder gebeurtenissen beschikbaar zijn. Moet tussen 1 en 5.000 zijn.
  • Voorkeursbatchgrootte in kilobytes - Doelmaximum voor batchgrootte in kilobytes. Net als bij maximumgebeurtenissen kan de batchgrootte kleiner zijn als er niet meer gebeurtenissen beschikbaar zijn op het moment van publiceren. Het is mogelijk dat een batch groter is dan de gewenste batchgrootte als één gebeurtenis groter is dan de voorkeursgrootte. Als de voorkeursgrootte bijvoorbeeld 4 kB is en een gebeurtenis van 10 kB naar Event Grid wordt gepusht, wordt de gebeurtenis van 10 kB nog steeds geleverd in een eigen batch in plaats van te worden verwijderd.

Batchgewijs leveren in een geconfigureerd abonnement per gebeurtenis via de portal, CLI, PowerShell of SDK's.

Batchgedrag

  • Alles of geen

    Event Grid werkt met alles-of-geen-semantiek. Het biedt geen ondersteuning voor gedeeltelijk succes van een batchlevering. Abonnees moeten ervoor zorgen dat ze alleen om zoveel gebeurtenissen per batch vragen als ze binnen 30 seconden redelijk kunnen verwerken.

  • Optimistische batchverwerking

    De beleidsinstellingen voor batchverwerking zijn geen strikte grenzen voor het gedrag van batchverwerking en worden in acht genomen op basis van best effort. Bij lage gebeurtenissnelheden ziet u vaak dat de batchgrootte kleiner is dan de aangevraagde maximumgebeurtenissen per batch.

  • De standaardwaarde is ingesteld op UIT

    Standaard voegt Event Grid slechts één gebeurtenis toe aan elke leveringsaanvraag. U kunt batchverwerking inschakelen door een van de eerder genoemde instellingen in het artikel in het JSON-gebeurtenisabonnement in te stellen.

  • Standaardwaarden

    Het is niet nodig om bij het maken van een gebeurtenisabonnement zowel de instellingen (maximumgebeurtenissen per batch als een geschatte batchgrootte in kilobytes) op te geven. Als er slechts één instelling is ingesteld, gebruikt Event Grid standaardwaarden (configureerbaar). Zie de volgende secties voor de standaardwaarden en hoe u deze kunt overschrijven.

Azure Portal:

U ziet deze instellingen op het tabblad Aanvullende functies van de pagina Gebeurtenisabonnement .

Schermopname van het tabblad Extra functies van de pagina Gebeurtenisabonnement met Batching gemarkeerd.

Azure-CLI

Wanneer u een gebeurtenisabonnement maakt, gebruikt u de volgende parameters:

  • max-events-per-batch - Maximum aantal gebeurtenissen in een batch. Moet een getal tussen 1 en 5000 zijn.
  • preferred-batch-size-in-kilobytes - Preferred batch size in kilobytes. Moet een getal tussen 1 en 1024 zijn.
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

Zie Storage-gebeurtenissen routeren naar een webeindpunt met Azure CLI voor meer informatie over het gebruik van Azure CLI met Event Grid.

Vertraagde levering

Als een eindpunt bezorgingsfouten ondervindt, begint Event Grid de levering te vertragen en gebeurtenissen opnieuw te proberen naar dat eindpunt. Als de eerste 10 gebeurtenissen die naar een eindpunt zijn gepubliceerd, bijvoorbeeld mislukken, gaat Event Grid ervan uit dat het eindpunt problemen ondervindt en alle volgende nieuwe pogingen en nieuwe leveringen enige tijd uitstellen, in sommige gevallen tot enkele uren.

Het functionele doel van vertraagde levering is om beschadigde eindpunten en het Event Grid-systeem te beschermen. Zonder uitstel en vertraging van de levering aan beschadigde eindpunten, kan het beleid voor opnieuw proberen en volume van Event Grid eenvoudig een systeem overbelasten.

Gebeurtenissen met dode letters

Wanneer Event Grid een gebeurtenis niet binnen een bepaalde periode kan leveren of nadat de gebeurtenis een bepaald aantal keren is bezorgd, kan de niet-bezorgde gebeurtenis naar een opslagaccount worden verzonden. Dit proces staat bekend als dead-lettering. Event Grid kan een gebeurtenis als aan een van de volgende voorwaarden wordt voldaan.

  • Gebeurtenis wordt niet geleverd binnen de time-to-live-periode .
  • Het aantal pogingen om de gebeurtenis te leveren, heeft de limiet overschreden.

Als aan een van de voorwaarden wordt voldaan, wordt de gebeurtenis verwijderd of niet-geschreven. Event Grid schakelt standaard geen dode letters in. Als u dit wilt inschakelen, moet u een opslagaccount opgeven voor het opslaan van niet-bezorgde gebeurtenissen bij het maken van het gebeurtenisabonnement. U haalt gebeurtenissen op uit dit opslagaccount om leveringen op te lossen.

Event Grid verzendt een gebeurtenis naar de locatie van de dode letter wanneer deze alle nieuwe pogingen heeft geprobeerd. Als Event Grid een antwoordcode van 400 (ongeldige aanvraag) of 413 (aanvraagentiteit te groot) ontvangt, wordt de gebeurtenis onmiddellijk gepland voor dode letters. Deze antwoordcodes geven aan dat de levering van de gebeurtenis nooit slaagt.

De time-to-live vervaldatum wordt ALLEEN gecontroleerd bij de volgende geplande leveringspoging. Dus zelfs als time-to-live verloopt voordat de volgende geplande leveringspoging verloopt, wordt het verlopen van gebeurtenissen alleen gecontroleerd op het moment van de volgende levering en vervolgens dode brieven.

Er is een vertraging van vijf minuten tussen de laatste poging om een gebeurtenis te leveren en wanneer deze wordt bezorgd bij de locatie van de dode letter. Deze vertraging is bedoeld om het aantal blobopslagbewerkingen te verminderen. Als de locatie van de dode letter vier uur niet beschikbaar is, wordt de gebeurtenis verwijderd.

Voordat u de locatie voor dode letters instelt, moet u een opslagaccount met een container hebben. U geeft het eindpunt voor deze container op bij het maken van het gebeurtenisabonnement. Het eindpunt heeft de volgende indeling: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>

Mogelijk wilt u een melding ontvangen wanneer een gebeurtenis is verzonden naar de locatie van de dode letter. Als u Event Grid wilt gebruiken om te reageren op niet-bezorgde gebeurtenissen, maakt u een gebeurtenisabonnement voor de blobopslag met dode letters. Telkens wanneer uw blobopslag met dode letters een niet-bezorgde gebeurtenis ontvangt, meldt Event Grid uw handler. De handler reageert met acties die u wilt uitvoeren voor het afstemmen van niet-bezorgde gebeurtenissen. Voor een voorbeeld van het instellen van een locatie voor dode letters en beleid voor opnieuw proberen, raadpleegt u beleid voor dode letters en beleid voor opnieuw proberen.

Notitie

Als u een beheerde identiteit inschakelt voor onbeletterde letters, moet u de beheerde identiteit toevoegen aan de juiste RBAC-rol (op rollen gebaseerd toegangsbeheer) in het Azure Storage-account dat de gebeurtenissen met dode letters bevat. Zie Ondersteunde bestemmingen en Azure-rollen voor meer informatie.

Indelingen voor bezorgingsevenementen

In deze sectie vindt u voorbeelden van gebeurtenissen en dode gebeurtenissen in verschillende bezorgingsschema-indelingen (Event Grid-schema, CloudEvents 1.0-schema en aangepast schema). Zie de artikelen over het Event Grid-schema en cloud gebeurtenissen 1.0-schema voor meer informatie over deze indelingen.

Event Grid-schema

Gebeurtenis

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

Gebeurtenis voor onbestelbare letters

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

Hier volgen de mogelijke waarden van lastDeliveryOutcome en hun beschrijvingen.

LastDeliveryOutcome Beschrijving
NotFound De doelresource is niet gevonden.
Uitgeschakeld De bestemming heeft het ontvangen van gebeurtenissen uitgeschakeld. Van toepassing op Azure Service Bus en Azure Event Hubs.
Volledig Het maximum aantal toegestane bewerkingen op de bestemming is overschreden. Van toepassing op Azure Service Bus en Azure Event Hubs.
Niet geautoriseerd Doel heeft een niet-geautoriseerde antwoordcode geretourneerd.
BadRequest De bestemming heeft een ongeldige antwoordcode voor aanvragen geretourneerd.
Verlopen Er is een time-out opgetreden voor de leveringsbewerking.
Bezet De doelserver is bezet.
PayloadTooLarge De grootte van het bericht heeft de maximaal toegestane grootte overschreden door de bestemming. Van toepassing op Azure Service Bus en Azure Event Hubs.
Proeftijd De bestemming wordt probatie uitgevoerd door Event Grid. De levering wordt niet uitgevoerd tijdens een proefbestel.
Geannuleerd De leveringsbewerking is geannuleerd.
Rudimentair Levering is na een tijdsinterval afgebroken door Event Grid.
SocketError Er is een netwerkcommunicatiefout opgetreden tijdens de levering.
ResolutionError DNS-omzetting van doeleindpunt is mislukt.
Leveren Gebeurtenissen aan de bestemming leveren.
SessionQueueNotSupported Gebeurtenislevering zonder sessie-id wordt uitgevoerd op een entiteit waarvoor sessieondersteuning is ingeschakeld. Van toepassing op azure Service Bus-entiteitsbestemming.
Verboden Levering is verboden op doeleindpunt (mogelijk vanwege IP-firewalls of andere beperkingen)
InvalidAzureFunctionDestination De Azure-doelfunctie is niet geldig. Waarschijnlijk omdat het niet het type EventGridTrigger heeft.

LastDeliveryOutcome: Probation

Een gebeurtenisabonnement wordt gedurende een duur door Event Grid in probatie geplaatst als de levering van gebeurtenissen aan die bestemming mislukt. De probatietijd verschilt voor verschillende fouten die door het doeleindpunt worden geretourneerd. Als een gebeurtenisabonnement zich in probatie bevindt, kunnen gebeurtenissen in een dode letter worden geplaatst of worden verwijderd zonder zelfs de levering uit te voeren, afhankelijk van de foutcode waardoor het in probatie is.

Error Duur van proeftijd
Bezet 10 seconden
NotFound 5 minuten
SocketError 30 seconden
ResolutionError 5 minuten
Uitgeschakeld 5 minuten
Volledig 5 minuten
Verlopen 10 seconden
Niet geautoriseerd 5 minuten
Verboden 5 minuten
InvalidAzureFunctionDestination 10 minuten

Notitie

Event Grid maakt gebruik van probatieduur voor beter leveringsbeheer en de duur kan in de toekomst veranderen.

CloudEvents 1.0-schema

Gebeurtenis

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

Gebeurtenis voor onbestelbare letters

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

Aangepast schema

Gebeurtenis

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

Gebeurtenis voor onbestelbare letters

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

Status van berichtbezorging

Event Grid gebruikt HTTP-antwoordcodes om de ontvangst van gebeurtenissen te bevestigen.

Succescodes

Event Grid beschouwt alleen de volgende HTTP-antwoordcodes als geslaagde leveringen. Alle andere statuscodes worden beschouwd als mislukte leveringen en worden indien nodig opnieuw geprobeerd of in een deadletter worden opgeslagen. Wanneer Event Grid een geslaagde statuscode ontvangt, wordt de levering voltooid beschouwd.

  • 200 OK
  • 201 Gemaakt
  • 202 Geaccepteerd
  • 203 Niet-bindende informatie
  • 204 Geen inhoud

Foutcodes

Alle andere codes die niet in de set staan (200-204) worden beschouwd als fouten en worden opnieuw geprobeerd (indien nodig). Sommige hebben specifieke beleidsregels voor opnieuw proberen die hier worden beschreven, alle andere volgen het standaard exponentieel uitstelmodel. Houd er rekening mee dat vanwege de zeer parallelle aard van de architectuur van Event Grid het gedrag voor opnieuw proberen niet-deterministisch is.

Statuscode Gedrag voor opnieuw proberen
400 Ongeldige aanvraag Niet opnieuw geprobeerd
401 Onbevoegd Probeer het na 5 minuten of meer opnieuw voor Azure-resources-eindpunten
403 Verboden Niet opnieuw geprobeerd
404 Niet gevonden Probeer het na 5 minuten of meer opnieuw voor Azure-resources-eindpunten
408 Time-out van aanvraag Probeer het na 2 minuten of meer opnieuw
413 Aanvraagentiteit te groot Niet opnieuw geprobeerd
503 Service niet beschikbaar Probeer het na 30 seconden of meer opnieuw
Alle anderen Probeer het na 10 seconden of meer opnieuw

Aangepaste leveringseigenschappen

Met gebeurtenisabonnementen kunt u HTTP-headers instellen die zijn opgenomen in bezorgde gebeurtenissen. Met deze mogelijkheid kunt u aangepaste headers instellen die vereist zijn voor een bestemming. U kunt maximaal 10 headers instellen bij het maken van een gebeurtenisabonnement. Elke headerwaarde mag niet groter zijn dan 4096 (4K) bytes. U kunt aangepaste headers instellen voor de gebeurtenissen die worden geleverd aan de volgende bestemmingen:

  • Webhooks
  • Azure Service Bus-onderwerpen en -wachtrijen
  • Azure Event Hubs
  • Hybride verbindingen doorgeven

Zie Aangepaste leveringseigenschappen voor meer informatie.

Volgende stappen