Event Grid och händelsestyrd arkitektur
Dirigera händelser från Azure-tjänster och anpassade publicerare med Event Grid, fördela dem till flera prenumeranter och jämför Event Grid med Event Hubs och Service Bus.
Event Grid och händelsestyrd arkitektur är en gratis lektion i Azure Fundamentals på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Azure Fundamentals, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Azure Fundamentals innehåller totalt 4 lektioner.
Vad är händelsestyrd arkitektur
I en händelsestyrd arkitektur kommunicerar komponenter genom att publicera och prenumerera på händelser i stället för att anropa varandra direkt. En komponent (producent) genererar en händelse när något anmärkningsvärt inträffar — en fil laddas upp, en order läggs eller en enhet skickar ett mätvärde. Andra komponenter (prenumeranter) reagerar på de händelser de är intresserade av, oberoende av varandra och asynkront. Det innebär att producenter och konsumenter frikopplas, vilket förbättrar skalbarhet, motståndskraft och underhållbarhet.
Vad är Azure Event Grid
Azure Event Grid är en fullständigt hanterad tjänst för händelseroutning som levererar händelser från källor (publicerare) till hanterare (prenumeranter) med hjälp av en push-modell. Event Grid är utformat för reaktiva, diskreta händelser — något har ändrats och du behöver reagera omedelbart. Tjänsten garanterar leverans minst en gång med automatiska nya försök, stöder filtrering så att prenumeranter endast tar emot relevanta händelser och kan dirigera händelser till Azure Functions, Logic Apps, webhooks, Event Hubs och Service Bus-köer.
Event Grid-ämnen och händelseprenumerationer
Publicerare skickar händelser till ett Event Grid-ämne. Prenumeranter skapar händelseprenumerationer på ett ämne och anger en slutpunkt samt valfria filterregler. Ett och samma ämne kan ha flera prenumerationer — varje prenumeration tar emot en separat kopia av matchande händelser. Azure-tjänster som Blob Storage, Resource Manager, Service Bus och Azure Container Registry är inbyggda händelsekällor med systemämnen som inte kräver någon ytterligare konfiguration.
# Create a custom Event Grid topic
az eventgrid topic create \
--name MyEventTopic \
--resource-group MyRG \
--location eastus
# Create a subscription routing to an Azure Function
az eventgrid event-subscription create \
--name myFunctionSub \
--source-resource-id '/subscriptions/.../providers/Microsoft.EventGrid/topics/MyEventTopic' \
--endpoint '/subscriptions/.../providers/Microsoft.Web/sites/myFunctionApp/functions/EventHandler'Händelseschema
Händelser som publiceras till Event Grid följer ett standardiserat JSON-schema med obligatoriska fält: id (unik identifierare), eventType (t.ex. Microsoft.Storage.BlobCreated), subject (sökväg till händelseresursen), eventTime (tidsstämpel enligt ISO 8601), dataVersion och data (nyttolast som är specifik för händelsen). Event Grid stöder även CloudEvents-schema (CNCF-standard) för interoperabilitet med andra händelseplattformar.
// Event Grid event payload (Event Grid schema)
[
{
'id': 'b781910b-3000-4f19-a4c2-b6b9c4ca7a12',
'eventType': 'Microsoft.Storage.BlobCreated',
'subject': '/blobServices/default/containers/uploads/blobs/photo.jpg',
'eventTime': '2025-01-15T12:30:00.000Z',
'data': {
'api': 'PutBlockList',
'url': 'https://mystorageacct.blob.core.windows.net/uploads/photo.jpg',
'contentType': 'image/jpeg',
'contentLength': 524288
},
'dataVersion': '',
'metadataVersion': '1'
}
]Händelsefiltrering
Händelseprenumerationer stöder filtrering för att minska mängden brus hos prenumeranten. Du kan filtrera efter händelsetyp (ta endast emot BlobCreated, inte BlobDeleted), prefix eller suffix för ämnet (endast blobbar i en viss container) eller avancerade filter på valfritt fält i händelsedata med operatorer som StringContains, NumberGreaterThan och BoolEquals. Filtreringen sker på serversidan, så prenumeranter tar endast emot händelser som matchar deras kriterier.
# Subscribe to BlobCreated events for .jpg files only
az eventgrid event-subscription create \
--name jpgImageSub \
--source-resource-id '/subscriptions/.../storageAccounts/mystorageaccount' \
--endpoint 'https://myfunction.azurewebsites.net/api/ProcessImage' \
--included-event-types 'Microsoft.Storage.BlobCreated' \
--subject-ends-with '.jpg'Event Grid jämfört med Event Hubs och Service Bus
Tre Azure-tjänster hanterar händelser och meddelanden — välj utifrån ditt scenario. Event Grid är avsett för reaktiv händelseroutning (låg volym, diskreta och reaktiva händelser — till exempel en avisering om en resursändring). Event Hubs är avsett för händelseströmning med hög genomströmning (miljontals händelser per sekund, telemetri och stordatapipelines). Service Bus är avsett för meddelandehantering i företag med ordning, deduplicering, dead-lettering och transaktioner (orderhantering och finansiella transaktioner).
// Decision guide:
// Event Grid — 'Something happened, react to it'
// Azure resource events, webhooks, low-latency fan-out
// Price: per event (cheap for low volume)
// Event Hubs — 'Capture a firehose of streaming data'
// IoT telemetry, log aggregation, real-time analytics
// Price: per throughput unit + capture
// Service Bus — 'Reliable message delivery between services'
// Order processing, workflow steps, dead-letter queues
// Price: per operation + messaging unitsPublicera anpassade händelser
Publicera anpassade händelser till ett Event Grid-ämne med en enkel HTTP POST-begäran och ämnets åtkomstnyckel. Alla tjänster eller program som kan skicka HTTP-begäranden kan publicera händelser. Det gör det enkelt att generera händelser från lokala program, tjänster från tredje part eller Azure-tjänster som saknar inbyggt stöd för Event Grid. Bunta ihop händelser på upp till 1 MB per POST för bättre effektivitet.
# Get the topic endpoint and key
TOPIC_ENDPOINT=$(az eventgrid topic show --name MyEventTopic --resource-group MyRG --query endpoint -o tsv)
TOPIC_KEY=$(az eventgrid topic key list --name MyEventTopic --resource-group MyRG --query key1 -o tsv)
# Publish a custom event
curl -X POST $TOPIC_ENDPOINT \
-H 'Content-Type: application/json' \
-H "aeg-sas-key: $TOPIC_KEY" \
-d '[{
"id": "event-001",
"eventType": "Contoso.OrderPlaced",
"subject": "/orders/ORD-12345",
"eventTime": "2025-01-15T12:00:00Z",
"data": { "orderId": "ORD-12345", "total": 99.99 },
"dataVersion": "1.0"
}]'Dead-letter- och återförsöksprinciper
Om ett försök att leverera en händelse misslyckas (prenumeranten returnerar HTTP-statuskoden non-2xx) gör Event Grid nya försök med exponentiell backoff och jitter i upp till 24 timmar (konfigurerbart till högst 72 timmar), med maximalt 30 försök. När alla försök har förbrukats kan Event Grid använda dead-lettering för att lagra oöverförda händelser i en Azure Blob Storage-container för manuell undersökning. Konfigurera dead-lettering när tillförlitlig händelseleverans är kritisk och du behöver granska eller bearbeta misslyckade händelser igen.
# Configure dead-letter storage and retry for a subscription
az eventgrid event-subscription update \
--name myFunctionSub \
--source-resource-id '/subscriptions/.../topics/MyEventTopic' \
--deadletter-endpoint '/subscriptions/.../storageAccounts/mystg/blobServices/default/containers/deadletter' \
--max-delivery-attempts 30 \
--event-ttl 1440 # 24 hours in minutesÖversikt över Azure Event Hubs
Azure Event Hubs är en distribuerad plattform för dataströmning som kan ta emot och bearbeta miljontals händelser per sekund. Den använder en partitionerad konsumentmodell — händelser distribueras över partitioner och varje konsumentgrupp läser händelser oberoende av de andra i sin egen takt. Det gör att flera konsumenter kan bearbeta samma ström utan samordning. Vanliga användningsområden är insamling av IoT-telemetri, aggregering av programloggar, analys av klickströmmar och datapipelines för instrumentpaneler i realtid.
# Create an Event Hubs namespace and hub
az eventhubs namespace create \
--name myEventHubNS \
--resource-group MyRG \
--location eastus \
--sku Standard
az eventhubs eventhub create \
--name telemetry \
--namespace-name myEventHubNS \
--resource-group MyRG \
--partition-count 8 \
--message-retention 3 # Days to retain eventsAzure Service Bus för tillförlitlig meddelandehantering
Azure Service Bus är en meddelandeförmedlare för företag som tillhandahåller köer (punkt-till-punkt) och ämnen med prenumerationer (publicera-prenumerera). Till skillnad från Event Grid (fire-and-forget) och Event Hubs (strömning) garanterar Service Bus leverans i ordning (FIFO-köer), identifiering av dubbletter, dead-letter-köer för bearbetningsfel, meddelandesessioner för grupperad bearbetning och transaktioner — allt sådant som är viktigt för arbetsflöden för finansiella transaktioner och orderhantering.
# Create a Service Bus namespace and queue
az servicebus namespace create \
--name myServiceBusNS \
--resource-group MyRG \
--location eastus \
--sku Standard
az servicebus queue create \
--name order-processing \
--namespace-name myServiceBusNS \
--resource-group MyRG \
--enable-dead-lettering-on-message-expiration true \
--max-delivery-count 10 # Move to dead-letter after 10 failed attemptsPraktiskt händelsestyrt mönster: filbearbetning
Ett vanligt händelsestyrt mönster i Azure är att en användare laddar upp en fil till Blob Storage, som utlöser en BlobCreated-händelse till Event Grid. Event Grid dirigerar händelsen till en Azure Function som bearbetar filen (ändrar storlek på en bild, extraherar text eller validerar data) och skriver resultatet till Azure SQL Database. Om bearbetningen misslyckas lagras händelsen i en dead-letter-kö i en lagringscontainer. Hela denna pipeline kräver ingen avfrågning och ingen beständig beräkningskapacitet när den är inaktiv.
// Azure Function: process image on BlobCreated event
module.exports = async function (context, eventGridEvent) {
const blobUrl = eventGridEvent.data.url;
const blobName = eventGridEvent.subject.split('/blobs/').pop();
context.log('Processing image:', blobName);
// Process via Cognitive Services Vision API
const tags = await analyzeImage(blobUrl);
// Write metadata to Cosmos DB via output binding
context.bindings.cosmosOutput = {
id: blobName,
tags,
processedAt: new Date().toISOString()
};
context.log('Processing complete for:', blobName);
};Snabbtest
Testa dina kunskaper om begreppen i Microsoft Azure Fundamentals (AZ-900) från den här lektionen.
Sammanfattning av lektionen
I den här lektionen lärde du dig att Azure Event Grid dirigerar diskreta händelser från publicerare till prenumeranter med push-leverans, filtrering och dead-lettering, den viktigaste skillnaden mellan Event Grid (reaktiva händelser), Event Hubs (strömning) och Service Bus (tillförlitlig meddelandehantering för företag) samt hur du bygger händelsestyrda pipelines genom att koppla Blob Storage-händelser via Event Grid till Azure Functions. Härnäst utforskar vi Azure DevOps-tjänster.
Lär dig Azure Fundamentals med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Event Grid och händelsestyrd arkitektur” gratis?
Ja – hela texten till ”Event Grid och händelsestyrd arkitektur” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Azure Fundamentals, kan Ni uppgradera till CoddyKit PRO. Kursen i Azure Fundamentals innehåller totalt 4 lektioner.
Vad lär jag mig i ”Event Grid och händelsestyrd arkitektur”?
Dirigera händelser från Azure-tjänster och anpassade publicerare med Event Grid, fördela dem till flera prenumeranter och jämför Event Grid med Event Hubs och Service Bus. Ni övar på Azure Fundamentals med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Azure Fundamentals?
Du behöver inga förkunskaper. Utbildningen i Azure Fundamentals på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Event Grid och händelsestyrd arkitektur”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Azure Fundamentals-lektionen?
Ja. Varje Azure Fundamentals-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Azure Functions-utlösare och bindningar
- Durable Functions för tillståndsbevarande arbetsflöden
- Azure Logic Apps
- Event Grid och händelsestyrd arkitektur