Dela via


Push-leverans av meddelanden och försök igen med namnområdesavsnitt

Push-leverans av Event Grid-namnområden ger varaktig leverans. Event Grid försöker leverera varje meddelande minst en gång för varje matchande prenumeration omedelbart. Om en prenumerants slutpunkt inte bekräftar mottagandet av en händelse eller om det uppstår ett fel, försöker Event Grid skicka leveransen igen baserat på ett fast återförsöksschema och återförsöksprincip. Som standard levererar Event Grid en händelse i taget till prenumeranten.

Kommentar

Event Grid garanterar inte order för händelseleverans, så prenumeranter kan ta emot dem i fel ordning.

Händelseprenumeration

En händelseprenumeration är en konfigurationsresurs som är associerad med ett enskilt namnområdesavsnitt. Du kan bland annat använda en händelseprenumeration för att ange kriterier för händelseval för att definiera den händelsesamling som är tillgänglig för en prenumerant av den totala uppsättningen händelser som är tillgängliga i ett ämne. Med hjälp av en händelseprenumeration definierar du också målslutpunkten som händelserna skickas till. Dessutom kan du med en händelseprenumeration ange andra egenskaper, till exempel maximalt antal återförsök för leverans och händelsers tid att leva, som definierar händelseleveransens körningsbeteende.

Schema för återförsök

När Event Grid får ett fel för ett händelseleveransförsök avgör Event Grid om det ska försöka leverera igen baserat på typen av fel.

Om felet som returneras av den prenumererade slutpunkten är ett konfigurationsrelaterat fel som inte kan åtgärdas med återförsök, skickar Event Grid händelsen till ett konfigurerat mål med obeställbara meddelanden. Om ingen obeställd bokstav har konfigurerats tas händelsen bort. En händelse är till exempel obeställd eller avbruten när slutpunkten som konfigurerats för händelseprenumerationen inte kan nås eftersom den har tagits bort. Återförsök av leverans sker inte för följande villkor och fel:

Villkor:

  • ArgumentException
  • TimeoutException
  • UnauthorizedAccessException
  • OperationCanceledException
  • SocketException |

Felkoder

  • 404 - NotFound
  • 401 - Unauthorized
  • 403 - Forbidden
  • 400 -BadRequest
  • 414 RequestUriTooLong

Kommentar

Om obeställbara meddelanden inte har konfigurerats för en slutpunkt tas händelser bort när ovanstående fel eller villkor inträffar. Överväg att konfigurera obeställbara meddelanden i din händelseprenumeration om du inte vill att den här typen av händelser ska tas bort. Händelser med obeställbara meddelanden släpps när målet med obeställbara meddelanden inte hittas.

Om villkoret eller felet som returneras av den prenumererade slutpunkten inte finns bland de som finns i ovanstående listor, försöker Event Grid igen på basbasis med hjälp av följande exponentiella återförsöksschema för backoff:

  • 0 sekunder (omedelbart återförsök)
  • 10 sekund
  • 30 sekunder
  • 1 minut
  • 5 minuter

Efter 5 minuter fortsätter Event Grid att försöka igen var 5:e minut tills händelsen har levererats eller det maximala antalet återförsök eller händelsetiden som ska live nås.

Återförsöksprincip

Du kan anpassa återförsöksprincipen med hjälp av följande två konfigurationsegenskaper för händelseprenumeration. En händelse tas bort (ingen obeställd bokstav har konfigurerats) eller är obeställd om någon av egenskaperna når sin konfigurerade gräns.

  • Maximalt antal leveranser – Värdet måste vara ett heltal mellan 1 och 10. Standardvärdet är 10. För push-leverans definierar den här egenskapen de maximala leveransförsöken.
  • Kvarhållning – den här egenskapen kallas event time to liveäven . Värdet måste vara ett ISO 8601-varaktighetsvärde med minutprecision. Från och med den tidpunkt då händelsen publicerades definierar den här egenskapen det tidsintervall efter vilket meddelandet upphör att gälla. Det minsta tillåtna värdet är "PT1M" (1 minut). Det högsta tillåtna värdet är 7 dagar eller det underliggande ämnets kvarhållningstid, beroende på vilket som är lägre. Azure-portalen ger en enkel användarupplevelse där du anger dagar, timmar och minuter som heltal.

Kommentar

Om du anger både Retention och Maximum delivery countanvänder Event Grid dem för att avgöra när händelseleveransen ska stoppas. Båda stoppar händelseleveransen. Om du till exempel anger 20 minuter som kvarhållning och 10 maximala leveransförsök innebär det att när en händelse inte levereras efter 20 minuter eller inte levereras efter 10 försök, beroende på vilket som inträffar först, är händelsen obeställd. Men på grund av återförsöksschemat har inställningen av det maximala antalet leveransförsök till 10 ingen inverkan eftersom händelser kommer att vara obeställbara först efter 20 minuter. Detta beror på att vid minut 20 sker leveransförsöket #8 (0, 10s, 30s, 1m, 5m, 10m, 15m, 20m) men vid den tidpunkten är händelsen obeställd.

Batchbearbetning av utdata

När du använder Webhooks som målslutpunktstyp skickar Event Grid som standard varje händelse individuellt till prenumeranter. Du kan konfigurera Event Grid till batchhändelser för leverans för bättre HTTP-prestanda i scenarier med högt dataflöde. Batchbearbetning är inaktiverat som standard och kan aktiveras per händelseprenumeration.

När Event Hubs används som målslutpunktstyp batchar Event Grid alltid händelser för maximal effektivitet och prestanda. Det finns ingen tillgänglig konfiguration av batchprinciper eftersom Event Grid som standard hanterar batchbeteendet vid leverans till Azure Event Hubs.

Batchbearbetningsprincip

Batchleverans har två inställningar:

  • Maximalt antal händelser per batch – Maximalt antal händelser som Event Grid levererar per batch. Värdet måste vara ett heltal mellan 1 och 5 000. Det här antalet överskrids aldrig. Färre händelser kan dock levereras om inga fler händelser är tillgängliga vid leveranstillfället. Event Grid fördröjer inte händelser för att skapa en batch om färre händelser är tillgängliga.
  • Önskad batchstorlek i kilobyte – Måltak för batchstorlek i kilobyte. Värdet måste vara ett tal mellan 1 och 1024. På samma sätt som maxhändelser kan batchstorleken vara mindre om tillräckligt många händelser inte är tillgängliga vid leveranstillfället. Det är möjligt att en batch är större än önskad batchstorlek om en enskild händelse är större än önskad storlek. Om den föredragna storleken till exempel är 4 KB och en 10Kb-händelse skickas till Event Grid, levereras 10Kb-händelsen i stället för att tas bort.

Batchbaserad leverans konfigureras per händelseprenumeration via portalen, CLI, PowerShell eller SDK:er.

Batchbearbetningsbeteende

  • Alla eller inga

    Event Grid fungerar med all-or-none-semantik. Den stöder inte delvis lyckad batchleverans. Prenumeranter bör vara noga med att bara be om så många händelser per batch som de rimligen kan hantera på 30 sekunder.

  • Optimistisk batchbearbetning

    Principinställningarna för batchbearbetning är inte strikta gränser för batchbearbetningsbeteendet och respekteras på bästa sätt. Vid låga händelsefrekvenser ser du ofta att batchstorleken är mindre än de begärda maximala händelserna per batch.

  • Standardvärdet är INSTÄLLT PÅ AV

    Som standard lägger Event Grid bara till en händelse i varje leveransbegäran. Sättet att aktivera batchbearbetning är att ange någon av inställningarna som anges i Batching-principen.

  • Standardvärden

    Du behöver inte ange båda inställningarna (Maximalt antal händelser per batch och Ungefärlig batchstorlek i kilobyte) när du skapar en händelseprenumeration. Om endast en inställning har angetts använder Event Grid standardvärden. Se följande avsnitt för standardvärdena och hur du åsidosätter dem.

Azure Portal

Du ser de här inställningarna på fliken Ytterligare funktioner på sidan Händelseprenumeration eller när händelseprenumerationen har skapats i menyalternativet Konfiguration när du öppnar händelseprenumerationen.

Skärmbild som visar fliken Ytterligare funktioner på sidan Händelseprenumeration med avsnittet Batching markerat.

Händelser med obeställbara bokstäver

När Event Grid inte kan leverera en händelse inom en viss tidsperiod eller efter att ha försökt leverera händelsen ett visst antal gånger skickar den händelsen till ett lagringskonto. Den här processen kallas för "dead-lettering". Event Grid-dödbokstäver en händelse när något av följande villkor uppfylls.

  • Händelsen levereras inte inom tidsperioden (kvarhållning definierad i händelseprenumerationen).
  • Antalet försök att leverera händelsen har överskridit gränsen.

Om någon av dem uppfylls tas händelsen bort eller skrivs med obeställbara bokstäver. Som standard aktiveras inte obeställbara bokstäver i Event Grid. Om du vill aktivera det måste du ange ett lagringskonto för att lagra händelser som inte har levererats när du skapar händelseprenumerationen. Du läser händelserna från det här lagringskontot för att lösa leveranser.

Event Grid skickar en händelse till platsen med obeställbara meddelanden när den har provat alla sina återförsök. Om Event Grid tar emot en svarskod på 400 (felaktig begäran) eller 413 (begärandeentiteten är för stor) schemalägger den omedelbart händelsen för obeställbar bokstav. Dessa svarskoder anger att leveransen av händelsen aldrig kommer att lyckas.

Time-to-live-förfallodatumet kontrolleras ENDAST vid nästa schemalagda leveransförsök. Så även om time-to-live upphör att gälla före nästa schemalagda leveransförsök kontrolleras händelseförfallodatum endast vid tidpunkten för nästa leverans och därefter obeställbara meddelanden.

Det finns en fördröjning på fem minuter mellan det senaste försöket att leverera en händelse och när den levereras till platsen med obeställbara meddelanden. Den här fördröjningen är avsedd att minska antalet Blob Storage-åtgärder. Om platsen med obeställbara meddelanden inte är tillgänglig i fyra timmar tas händelsen bort.

Innan du anger platsen för obeställbara bokstäver måste du ha ett lagringskonto med en container. Du anger slutpunkten för den här containern när du skapar händelseprenumerationen. Slutpunkten är i formatet: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>

Du kanske vill få ett meddelande när en händelse har skickats till platsen för obeställbara meddelanden. Om du vill använda Event Grid för att svara på händelser som inte har levererats skapar du en händelseprenumeration för bloblagringen med obeställbara bokstäver. Varje gång bloblagringen med obeställbara meddelanden tar emot en händelse som inte har levererats meddelar Event Grid din hanterare. Hanteraren svarar med åtgärder som du vill vidta för att förena händelser som inte har levererats.

När du konfigurerar obeställbara bokstäver måste du lägga till den hanterade identiteten till rätt rollbaserad åtkomstkontrollroll (RBAC) på Azure Storage-kontot som ska innehålla händelser med obeställbara bokstäver. Mer information finns i Mål som stöds och Azure-roller.

Leveranshändelseformat

Det här avsnittet innehåller exempel på händelser och händelser med obeställbara bokstäver med hjälp av CloudEvents 1.0-schemat, det meddelandemetadataformat som stöds i namnområdesämnen.

CloudEvents 1.0-schema

Event

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

Händelse med obeställbara bokstäver

[
  {
    "deadLetterProperties": {
      "deadletterreason": "Maximum delivery attempts was exceeded.",
      "deliveryattempts": 1,
      "deliveryresult": "Event was not acknowledged nor rejected.",
      "publishutc": "2023-11-01T20:33:51.4521467Z",
      "deliveryattemptutc": "2023-11-01T20:33:52.3692079Z"
    },
    "event": {
      "comexampleextension1": "value1",
      "id": "A234-1234-1234",
      "comexampleothervalue": "5",
      "datacontenttype": "text/xml",
      "specversion": "1.0",
      "time": "2018-04-05T17:31:00Z",
      "source": "/mycontext",
      "type": "com.example.someevent",
      "data": <your-event-data>
    }
  }
]

LastDeliveryOutcome: Skyddstillsyn

En händelseprenumeration sätts i skyddstillsyn av Event Grid under en tid om händelseleveranserna till målet börjar misslyckas. Skyddstillsynstiden skiljer sig åt för olika fel som returneras av målslutpunkten. Om en händelseprenumeration är under skyddstillsyn kan händelser bli obeställbara eller borttagna utan att ens försöka leverera beroende på felkoden på grund av vilken den är under skyddstillsyn.

Fel Varaktighet för skyddstillsyn
Upptagen 10 sekund
NotFound 5 minuter
SocketError 30 sekunder
ResolutionError 5 minuter
Inaktiverad 5 minuter
Fullständig 5 minuter
TimedOut 10 sekund
Behörighet saknas 5 minuter
Förbjudet 5 minuter
OgiltigAzureFunctionDestination 10 minuter

Kommentar

Event Grid använder prövotid för bättre leveranshantering och varaktigheten kan ändras i framtiden.

Status för meddelandeleverans

Event Grid använder HTTP-svarskoder för att bekräfta mottagandet av händelser.

Lyckade koder

Event Grid betraktar endast följande HTTP-svarskoder som lyckade leveranser. Alla andra statuskoder betraktas som misslyckade leveranser och kommer att prövas på nytt eller med obeställbara bokstäver efter behov. När Event Grid tar emot en lyckad statuskod anses leveransen vara klar.

  • 200 OK
  • 201 Skapad
  • 202 Accepterad
  • 203 Icke-auktoritativ information
  • 204 inget innehåll

Felkoder

Alla andra koder som inte finns i ovanstående uppsättning (200–204) betraktas som fel och kommer att försökas igen om det behövs. Vissa har specifika återförsöksprinciper kopplade till dem som beskrivs nedan, andra följer standardschemat för återförsök. Det är viktigt att komma ihåg att på grund av den mycket parallelliserade karaktären hos Event Grids arkitektur är återförsöksbeteendet icke-deterministiskt.

Statuskod Beteende för återförsök
400 – Felaktig begäran Försök inte igen
401 – Ej behörig Försök igen efter 5 minuter eller mer för Azure-resursers slutpunkter
403 – Förbjuden Försök inte igen
404 – Hittades inte Försök igen efter 5 minuter eller mer för Azure-resursers slutpunkter
408 Timeout för begäran Försök igen efter 2 minuter eller mer
413 Begärandeentiteten är för stor Försök inte igen
503 Tjänsten är inte tillgänglig Försök igen efter 30 sekunder eller mer
Alla andra Försök igen efter 10 sekunder eller mer

Anpassade leveransegenskaper

Med händelseprenumerationer kan du konfigurera HTTP-huvuden som ingår i levererade händelser. Med den här funktionen kan du ange anpassade rubriker som krävs av ett mål. Du kan konfigurera upp till 10 huvuden när du skapar en händelseprenumeration. Varje rubrikvärde får inte vara större än 4 096 byte (4 000). Du kan ange anpassade rubriker för de händelser som levereras till följande mål:

  • Webhook
  • Azure Event Hubs

Nästa steg