Event Grid ve Olay Odaklı Mimari
Azure hizmetlerinden ve özel yayıncılardan gelen olayları Event Grid kullanarak yönlendirin, bunları birden çok aboneye dağıtın ve Event Grid'i Event Hubs ile Service Bus'la karşılaştırın.
Event Grid ve Olay Odaklı Mimari, CoddyKit'te ücretsiz bir Azure Fundamentals dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Azure Fundamentals öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Azure Fundamentals kursu toplamda 4 dersten oluşur.
Olay Güdümlü Mimari Nedir
Olay güdümlü mimaride bileşenler birbirlerini doğrudan çağırmak yerine olayları yayımlayıp bunlara abone olarak iletişim kurar. Bir bileşen (üretici), dikkate değer bir durum gerçekleştiğinde (bir dosyanın yüklenmesi, bir siparişin verilmesi veya bir cihazın ölçüm göndermesi gibi) bir olay yayımlar. Diğer bileşenler (aboneler), ilgilendikleri olaylara bağımsız ve eşzamansız olarak tepki verir. Bu yapı üreticileri tüketicilerden ayırarak ölçeklenebilirliği, dayanıklılığı ve sürdürülebilirliği artırır.
Azure Event Grid Nedir
Azure Event Grid, olayları kaynaklardan (yayımcılardan) işleyicilere (abonelere) itme modeli kullanarak ileten, tamamen yönetilen bir olay yönlendirme hizmetidir. Event Grid, tepkisel, ayrık olaylar için tasarlanmıştır; yani bir şey değişir ve hemen tepki vermeniz gerekir. Otomatik yeniden denemeyle en az bir kez teslim garantisi sunar, abonelerin yalnızca ilgili olayları alması için filtrelemeyi destekler ve olayları Azure Functions, Logic Apps, web kancaları, Event Hubs ve Service Bus kuyruklarına yönlendirebilir.
Event Grid Konuları ve Olay Abonelikleri
Yayımcılar olayları bir Event Grid konusuna gönderir. Aboneler bir konu üzerinde olay abonelikleri oluşturur ve bir uç noktayla isteğe bağlı filtre kurallarını belirtir. Tek bir konuda birden çok abonelik bulunabilir; her abonelik, eşleşen olayların bağımsız bir kopyasını alır. Blob Storage, Resource Manager, Service Bus ve Azure Container Registry gibi Azure hizmetleri, ek yapılandırma gerektirmeyen sistem konularına sahip yerleşik olay kaynaklarıdır.
# 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'Olay Şeması
Event Grid'e yayımlanan olaylar, zorunlu alanlara sahip standart bir JSON şemasını izler: id (benzersiz tanımlayıcı), eventType (ör. Microsoft.Storage.BlobCreated), subject (olay kaynağının yolu), eventTime (ISO 8601 zaman damgası), dataVersion ve data (olaya özgü yük). Event Grid, diğer olay platformlarıyla birlikte çalışabilirlik için CloudEvents şemasını (CNCF standardı) da destekler.
// 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'
}
]Olay Filtreleme
Olay abonelikleri, abone tarafındaki gürültüyü azaltmak için filtrelemeyi destekler. Olay türüne göre (yalnızca BlobCreated olaylarını alıp BlobDeleted olaylarını almamak), konu ön ekine veya son ekine göre (yalnızca belirli bir kapsayıcıdaki blob'lar) ya da StringContains, NumberGreaterThan ve BoolEquals gibi işleçleri kullanarak olay verilerindeki herhangi bir alana uygulanan gelişmiş filtrelerle filtreleme yapabilirsiniz. Filtreleme sunucu tarafında gerçekleşir; bu nedenle aboneler yalnızca ölçütleriyle eşleşen olayları alır.
# 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 ve Event Hubs ile Service Bus Karşılaştırması
Üç Azure hizmeti olayları ve iletileri işler; seçiminizi senaryonuza göre yapın. Event Grid, tepkisel olay yönlendirme (düşük hacimli, ayrık ve tepkisel olaylar; örneğin kaynak değişikliği bildirimi) içindir. Event Hubs, yüksek aktarım hızlı olay akışı (saniyede milyonlarca olay, telemetri ve büyük veri işlem hatları) içindir. Service Bus ise sıralama, yinelenenleri algılama, ölü harfe gönderme ve işlemler içeren kurumsal iletişim (sipariş işleme ve finansal işlemler) içindir.
// 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 unitsÖzel Olayları Yayımlama
Bir konunun erişim anahtarını kullanarak basit bir HTTP POST isteğiyle özel olayları bir Event Grid konusuna yayımlayın. HTTP istekleri gönderebilen her hizmet veya uygulama olay yayımlayabilir. Bu sayede şirket içi uygulamalardan, üçüncü taraf hizmetlerden veya yerel Event Grid desteği olmayan Azure hizmetlerinden olay yayımlamak oldukça kolaylaşır. Verimlilik için her POST isteğinde 1 MB'a kadar olayı toplu olarak gönderin.
# 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"
}]'Ölü Harf ve Yeniden Deneme İlkeleri
Bir olay teslimi girişimi başarısız olursa (abone 2xx olmayan bir HTTP yanıtı döndürürse) Event Grid, en fazla 24 saat boyunca (72 saate kadar yapılandırılabilir) titreşimli üstel geri çekilme kullanarak yeniden dener; en fazla 30 yeniden deneme yapılır. Yeniden denemeler tükendikten sonra Event Grid, teslim edilemeyen olayları manuel inceleme için bir Azure Blob Storage kapsayıcısına ölü harf olarak gönderebilir. Güvenilir olay tesliminin kritik olduğu ve başarısız olayları denetlemeniz veya yeniden işlemeniz gereken durumlarda ölü harf göndermeyi yapılandırın.
# 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 minutesAzure Event Hubs Genel Bakış
Azure Event Hubs, saniyede milyonlarca olayı alıp işleyebilen dağıtılmış bir veri akışı platformudur. Bölümlenmiş tüketici modeli kullanır; olaylar bölümlere dağıtılır ve her tüketici grubu olayları kendi hızında bağımsız olarak okur. Bu sayede birden çok tüketici aynı akışı eşgüdüm gerektirmeden işleyebilir. Yaygın kullanım alanları arasında IoT telemetrisi alımı, uygulama günlüğü toplama, tıklama akışı analizi ve gerçek zamanlı pano veri işlem hatları bulunur.
# 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 eventsGüvenilir İletişim için Azure Service Bus
Azure Service Bus, kuyruklar (noktadan noktaya) ve abonelikli konular (yayınlama-abone olma) sağlayan kurumsal bir ileti aracısıdır. Event Grid'den (gönder ve unut) ve Event Hubs'tan (akış) farklı olarak Service Bus; sıralı teslim (FIFO kuyrukları), yinelenenleri algılama, işleme hataları için ölü harf kuyrukları, gruplandırılmış işleme için ileti oturumları ve işlemler sunar. Bunların tümü finansal ve sipariş işleme iş akışları için gereklidir.
# 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 attemptsUygulamalı Olay Güdümlü Desen: Dosya İşleme
Yaygın bir Azure olay güdümlü deseni şöyledir: Kullanıcı bir dosyayı Blob Storage'a yükler ve bu işlem Event Grid'e bir BlobCreated olayı gönderir. Event Grid, olayı dosyayı işleyen bir Azure Function'a yönlendirir (görüntüyü yeniden boyutlandırır, metin çıkarır veya verileri doğrular) ve sonucu Azure SQL Database'e yazar. İşleme başarısız olursa olay bir depolama kapsayıcısına ölü harf olarak gönderilir. Bu işlem hattının tamamı yoklama gerektirmez ve boşta kaldığında sürekli çalışan işlem kaynağı kullanmaz.
// 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);
};Hızlı Kontrol
Bu dersteki Microsoft Azure Fundamentals (AZ-900) kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: Azure Event Grid, ayrık olayları filtreleme ve ölü harf gönderme özellikleriyle itme teslimi kullanarak yayımcılardan abonelere yönlendirir; Event Grid (tepkisel olaylar), Event Hubs (akış) ve Service Bus (güvenilir kurumsal iletişim) arasındaki temel farkları öğrendiniz ve Blob Storage olaylarını Event Grid üzerinden Azure Functions'a zincirleyerek olay güdümlü işlem hatları oluşturmayı gördünüz. Sırada Azure DevOps hizmetlerini inceleyeceğiz.
Sıkça Sorulan Sorular
“Event Grid ve Olay Odaklı Mimari” dersi ücretsiz mi?
Evet — “Event Grid ve Olay Odaklı Mimari” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Azure Fundamentals kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Azure Fundamentals kursu toplamda 4 dersten oluşur.
“Event Grid ve Olay Odaklı Mimari” dersinde ne öğreneceğim?
Azure hizmetlerinden ve özel yayıncılardan gelen olayları Event Grid kullanarak yönlendirin, bunları birden çok aboneye dağıtın ve Event Grid'i Event Hubs ile Service Bus'la karşılaştırın. Azure Fundamentals ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Azure Fundamentals öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Azure Fundamentals, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Event Grid ve Olay Odaklı Mimari” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Azure Fundamentals dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Azure Fundamentals dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Azure Functions Tetikleyicileri ve Bağlamaları
- Durum Bilgili İş Akışları için Durable Functions
- Azure Logic Apps
- Event Grid ve Olay Odaklı Mimari