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 attempts
Event 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 .
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
- Zie Event Grid-berichtbezorging controleren om de status van gebeurtenisleveringen weer te geven.
- Als u opties voor het bezorgen van gebeurtenissen wilt aanpassen, raadpleegt u beleid voor dode brieven en beleid voor opnieuw proberen.