Event Grid i architektura sterowana zdarzeniami
Kieruj zdarzenia z usług Azure i niestandardowych wydawców za pomocą Event Grid, rozsyłaj je do wielu subskrybentów oraz porównaj Event Grid z Event Hubs i Service Bus.
Event Grid i architektura sterowana zdarzeniami to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Czym jest architektura sterowana zdarzeniami?
W architekturze sterowanej zdarzeniami komponenty komunikują się przez publikowanie zdarzeń i subskrybowanie ich, zamiast bezpośredniego wywoływania się nawzajem. Komponent (producent) emituje zdarzenie, gdy wydarzy się coś istotnego — zostanie przesłany plik, zostanie złożone zamówienie lub urządzenie wyśle odczyt. Inne komponenty (subskrybenci) niezależnie i asynchronicznie reagują na interesujące je zdarzenia. Takie rozdzielenie producentów od odbiorców poprawia skalowalność, odporność i łatwość utrzymania.
Czym jest Azure Event Grid?
Azure Event Grid to w pełni zarządzana usługa routingu zdarzeń, która dostarcza zdarzenia ze źródeł (wydawców) do modułów obsługi (subskrybentów) przy użyciu modelu wypychania. Event Grid jest przeznaczony dla reaktywnych, dyskretnych zdarzeń — coś się zmieniło i trzeba natychmiast zareagować. Usługa gwarantuje dostarczenie co najmniej raz, automatycznie ponawia próby, obsługuje filtrowanie, dzięki czemu subskrybenci otrzymują tylko istotne zdarzenia, oraz może kierować zdarzenia do Azure Functions, Logic Apps, elementów webhook, Event Hubs i kolejek Service Bus.
Tematy Event Grid i subskrypcje zdarzeń
Wydawcy wysyłają zdarzenia do tematu Event Grid. Subskrybenci tworzą subskrypcje zdarzeń w temacie, określając punkt końcowy i opcjonalne reguły filtrowania. Jeden temat może mieć wiele subskrypcji — każda subskrypcja otrzymuje niezależną kopię pasujących zdarzeń. Usługi Azure, takie jak Blob Storage, Resource Manager, Service Bus i Azure Container Registry, są wbudowanymi źródłami zdarzeń z tematami systemowymi, które nie wymagają dodatkowej konfiguracji.
# 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'Schemat zdarzenia
Zdarzenia publikowane w Event Grid są zgodne ze standardowym schematem JSON zawierającym wymagane pola: id (unikatowy identyfikator), eventType (np. Microsoft.Storage.BlobCreated), subject (ścieżka do zasobu zdarzenia), eventTime (znacznik czasu ISO 8601), dataVersion oraz data (dane właściwe dla zdarzenia). Event Grid obsługuje również schemat CloudEvents (standard CNCF), zapewniający współdziałanie z innymi platformami zdarzeniowymi.
// 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'
}
]Filtrowanie zdarzeń
Subskrypcje zdarzeń obsługują filtrowanie, aby ograniczyć liczbę nieistotnych zdarzeń po stronie subskrybenta. Można filtrować według typu zdarzenia (otrzymywać tylko BlobCreated, a nie BlobDeleted), prefiksu lub sufiksu tematu (tylko obiekty blob z określonego kontenera) albo za pomocą filtrów zaawansowanych dotyczących dowolnego pola danych zdarzenia, korzystając z operatorów takich jak StringContains, NumberGreaterThan i BoolEquals. Filtrowanie odbywa się po stronie serwera, więc subskrybenci otrzymują tylko zdarzenia spełniające określone kryteria.
# 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 a Event Hubs i Service Bus
Trzy usługi Azure obsługują zdarzenia i komunikaty — należy wybrać usługę odpowiednią do danego scenariusza. Event Grid służy do reaktywnego routingu zdarzeń (mały wolumen, dyskretne i reaktywne zdarzenia, np. powiadomienie o zmianie zasobu). Event Hubs służy do strumieniowego przesyłania danych z dużą przepustowością (miliony zdarzeń na sekundę, dane telemetryczne, potoki big data). Service Bus służy do obsługi komunikatów klasy enterprise z zachowaniem kolejności, wykrywaniem duplikatów, obsługą komunikatów niedostarczonych i transakcjami (przetwarzanie zamówień, transakcje finansowe).
// 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 unitsPublikowanie zdarzeń niestandardowych
Zdarzenia niestandardowe można publikować w temacie Event Grid za pomocą prostego żądania HTTP POST z kluczem dostępu do tematu. Zdarzenia może publikować dowolna usługa lub aplikacja, która potrafi wykonywać żądania HTTP. Dzięki temu można łatwo emitować zdarzenia z aplikacji lokalnych, usług innych firm lub usług Azure, które nie mają natywnej obsługi Event Grid. W celu zwiększenia wydajności można umieścić w jednym żądaniu POST partię zdarzeń o rozmiarze do 1 MB.
# 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"
}]'Zasady ponawiania prób i obsługi komunikatów niedostarczonych
Jeśli próba dostarczenia zdarzenia zakończy się niepowodzeniem (subskrybent zwróci kod HTTP spoza zakresu 2xx), Event Grid ponawia próbę, stosując wykładniczy czas oczekiwania z losowym rozproszeniem, przez maksymalnie 24 godziny (wartość można skonfigurować do 72 godzin), wykonując najwyżej 30 prób. Po wyczerpaniu prób Event Grid może przekazać niedostarczone zdarzenia do magazynu komunikatów niedostarczonych w kontenerze Azure Blob Storage, aby umożliwić ich ręczne zbadanie. Obsługę komunikatów niedostarczonych należy skonfigurować wtedy, gdy niezawodne dostarczanie zdarzeń ma kluczowe znaczenie i konieczne jest kontrolowanie lub ponowne przetwarzanie nieudanych zdarzeń.
# 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 minutesOmówienie Azure Event Hubs
Azure Event Hubs to rozproszona platforma strumieniowego przesyłania danych, która może odbierać i przetwarzać miliony zdarzeń na sekundę. Korzysta z partycjonowanego modelu konsumentów — zdarzenia są rozdzielane między partycje, a każda grupa konsumentów odczytuje je niezależnie, we własnym tempie. Umożliwia to wielu konsumentom przetwarzanie tego samego strumienia bez uzgadniania działań. Typowe zastosowania obejmują pozyskiwanie danych telemetrycznych IoT, agregowanie dzienników aplikacji, analizę strumienia kliknięć oraz potoki danych zasilające pulpity nawigacyjne w czasie rzeczywistym.
# 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 do niezawodnej obsługi komunikatów
Azure Service Bus to broker komunikatów klasy enterprise oferujący kolejki (punkt-punkt) oraz tematy z subskrypcjami (publikowanie-subskrybowanie). W przeciwieństwie do Event Grid (model „wyślij i zapomnij”) i Event Hubs (strumieniowanie) Service Bus gwarantuje dostarczanie w określonej kolejności (kolejki FIFO), wykrywanie duplikatów, kolejki komunikatów niedostarczonych na potrzeby obsługi błędów przetwarzania, sesje komunikatów do grupowania przetwarzania oraz transakcje — wszystkie te funkcje są niezbędne w przepływach przetwarzania transakcji finansowych i zamówień.
# 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 attemptsPraktyczny wzorzec sterowany zdarzeniami: przetwarzanie plików
Typowy wzorzec sterowany zdarzeniami w Azure wygląda następująco: użytkownik przesyła plik do Blob Storage, który emituje zdarzenie BlobCreated do Event Grid. Event Grid kieruje zdarzenie do Azure Function, która przetwarza plik (zmienia rozmiar obrazu, wyodrębnia tekst lub sprawdza poprawność danych), a następnie zapisuje wynik w Azure SQL Database. Jeśli przetwarzanie się nie powiedzie, zdarzenie trafia do magazynu komunikatów niedostarczonych w kontenerze magazynu. Cały ten potok nie wymaga odpytywania ani stałych zasobów obliczeniowych, gdy jest bezczynny.
// 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);
};Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat zagadnień Microsoft Azure Fundamentals (AZ-900) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji poznali Państwo następujące zagadnienia: Azure Event Grid kieruje dyskretne zdarzenia od wydawców do subskrybentów, korzystając z dostarczania w modelu push, filtrowania i obsługi komunikatów niedostarczonych; omówili Państwo kluczowe różnice między Event Grid (zdarzenia reaktywne), Event Hubs (strumieniowanie) i Service Bus (niezawodna obsługa komunikatów klasy enterprise), a także sposób tworzenia potoków sterowanych zdarzeniami przez przekazywanie zdarzeń z Blob Storage za pośrednictwem Event Grid do Azure Functions. Następnie omówimy usługi Azure DevOps.
Często zadawane pytania
Czy lekcja „Event Grid i architektura sterowana zdarzeniami” jest bezpłatna?
Tak — pełny tekst „Event Grid i architektura sterowana zdarzeniami” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Event Grid i architektura sterowana zdarzeniami”?
Kieruj zdarzenia z usług Azure i niestandardowych wydawców za pomocą Event Grid, rozsyłaj je do wielu subskrybentów oraz porównaj Event Grid z Event Hubs i Service Bus. Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?
Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Event Grid i architektura sterowana zdarzeniami”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?
Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wyzwalacze i powiązania Azure Functions
- Durable Functions dla przepływów pracy ze stanem
- Azure Logic Apps
- Event Grid i architektura sterowana zdarzeniami