Event Grid ileti teslimi ve yeniden deneme

Event Grid dayanıklı teslim sağlar. Her eşleşen abonelik için her iletiyi en az bir kez hemen teslim etmeye çalışır. Abonenin uç noktası bir olayın alınıp alınmadığını kabul etmiyorsa veya bir hata varsa, Event Grid teslimi sabit bir yeniden deneme zamanlamasına ve yeniden deneme ilkesine göre yeniden dener. Event Grid varsayılan olarak aboneye bir kerede bir olay teslim eder. Ancak yük, tek bir olayı olan bir dizidir.

Not

Event Grid, olay teslimi için sipariş garantisi vermez, bu nedenle aboneler bunları sipariş dışı alabilir.

Zamanlamayı yeniden deneyin

Event Grid bir olay teslim denemesi için bir hata aldığında, Event Grid teslimi yeniden denemesi mi, olayı geri mi atması yoksa hatanın türüne göre olayı bırakması mı gerektiğine karar verir.

Abone olunan uç nokta tarafından döndürülen hata, yeniden denemelerle düzeltilemeyen yapılandırmayla ilgili bir hataysa (örneğin, uç nokta silinirse), Event Grid olayda geçersiz yazma gerçekleştirir veya teslim edilemeyen harf yapılandırılmamışsa olayı bırakır.

Aşağıdaki tabloda, yeniden denemenin gerçekleşmediği uç nokta ve hata türleri açıklanmaktadır:

Uç Nokta Türü Hata kodları
Azure Kaynakları 400 (Hatalı istek), 413 (İstek varlığı çok büyük)
Web kancası 400 (Hatalı istek), 413 (İstek varlığı çok büyük), 401 (Yetkisiz)

Not

Bir uç nokta için geçersiz harf yapılandırılmamışsa, yukarıdaki hatalar gerçekleştiğinde olaylar bırakılır. Bu tür olayların bırakılmasını istemiyorsanız, geçersiz harfi yapılandırmayı göz önünde bulundurun. Teslim edilemeyen harf hedefi bulunamazsa, teslim edilemeyen olaylar bırakılır.

Abone olunan uç nokta tarafından döndürülen hata yukarıdaki listede yoksa, Event Grid aşağıda açıklanan ilkeyi kullanarak yeniden deneme gerçekleştirir:

Event Grid, ileti teslim ettikten sonra yanıt için 30 saniye bekler. 30 saniye sonra uç nokta yanıt vermezse, ileti yeniden denemek üzere kuyruğa alınır. Event Grid, olay teslimi için üstel geri alma yeniden deneme ilkesi kullanır. Event Grid, teslimi en iyi çaba temelinde aşağıdaki zamanlamaya göre yeniden denenir:

  • 10 saniye
  • 30 saniye
  • 1 dakika
  • 5 dakika
  • 10 dakika
  • 30 dakika
  • 1 saat
  • 3 saat
  • 6 saat
  • 12 saatte bir en fazla 24 saat

Uç nokta 3 dakika içinde yanıt verirse, Event Grid olayı en iyi çaba temelinde yeniden deneme kuyruğundan kaldırmaya çalışır, ancak yine de yinelenenler alınabilir.

Event Grid, tüm yeniden deneme adımlarına küçük bir rastgele seçim ekler ve uç nokta sürekli olarak iyi durumda değilse, uzun bir süre boyunca aşağıdaysa veya bunalmış gibi görünüyorsa belirli yeniden denemeleri fırsatçı bir şekilde atlayabilir.

Yeniden deneme ilkesi

Aşağıdaki iki yapılandırmayı kullanarak bir olay aboneliği oluştururken yeniden deneme ilkesini özelleştirebilirsiniz. Yeniden deneme ilkesinin sınırlarından herhangi birinin sınırına ulaşılırsa bir olay bırakılır.

  • En fazla deneme sayısı - Değer 1 ile 30 arasında bir tamsayı olmalıdır. Varsayılan değer 30’dur.
  • Olay yaşam süresi (TTL) - Değer 1 ile 1440 arasında bir tamsayı olmalıdır. Varsayılan değer 1440 dakikadır

Bu ayarları yapılandırmak için örnek CLI ve PowerShell komutu için bkz . Yeniden deneme ilkesini ayarlama.

Not

hem Maximum number of attemptshem de Event time to live (TTL) değerini ayarlarsanız Event Grid, olay tesliminin ne zaman durdurulacağını belirlemek için ilk kullanım süresini kullanır. Örneğin, 30 dakikayı yaşam süresi (TTL) ve en fazla 5 teslimat denemesi olarak ayarlarsanız. Bir olay 5 denemeden sonra 30 dakika (veya) sonra teslim edilmediğinde (hangisi önce gerçekleşirse), olay geçersiz olarak yazılır. Üstel yeniden deneme zamanlamasına göre en fazla teslim denemesini 10 olarak ayarlarsanız, 30 dakika öncesinde en fazla 6 teslim denemesi sayısı TTL'ye ulaşılır, bu nedenle maksimum deneme sayısını 10 olarak ayarlamak bu durumda herhangi bir etkisi olmaz ve olaylar 30 dakika sonra teslim edilemez.

Çıkışı toplu işleme

Event Grid varsayılan olarak her olayı abonelere tek tek gönderir. Abone tek bir olayla bir dizi alır. Event Grid'i, yüksek aktarım hızı senaryolarında gelişmiş HTTP performansı için teslim için toplu olaylar için yapılandırabilirsiniz. Toplu işlem varsayılan olarak kapalıdır ve abonelik başına etkinleştirilebilir.

Toplu işlem ilkesi

Toplu teslim iki ayara sahiptir:

  • Toplu iş başına en fazla olay - Event Grid'in toplu iş başına teslim gerçekleştirilen en fazla olay sayısı. Bu sayı hiçbir zaman aşılmaz, ancak yayımlama sırasında başka bir olay yoksa daha az olay teslim edilebilir. Event Grid, daha az olay varsa toplu iş oluşturmak için olayları geciktirmiyor. 1 ile 5.000 arasında olmalıdır.
  • Kilobayt cinsinden tercih edilen toplu iş boyutu - Kilobayt cinsinden toplu iş boyutu için hedef tavan. En büyük olaylara benzer şekilde, yayımlama sırasında daha fazla olay yoksa toplu iş boyutu daha küçük olabilir. Tek bir olay tercih edilen boyuttan daha büyükse, bir toplu iş tercih edilen toplu iş boyutundan büyük olabilir. Örneğin, tercih edilen boyut 4 KB ise ve 10 KB'lık olay Event Grid'e gönderiliyorsa, 10 KB'lık olay bırakılmak yerine kendi toplu işlemiyle teslim edilir.

içinde toplu teslim, portal, CLI, PowerShell veya SDK'lar aracılığıyla olay başına abonelik temelinde yapılandırılır.

Toplu işlem davranışı

  • Tümü veya hiçbiri

    Event Grid tümü veya hiçbiri semantiğiyle çalışır. Toplu teslimin kısmi başarıyı desteklemez. Aboneler toplu iş başına yalnızca 30 saniye içinde makul bir şekilde işleyebileceği kadar çok olay istemeye dikkat etmelidir.

  • İyimser toplu işlem

    Toplu işlem ilkesi ayarları, toplu işlem davranışına yönelik katı sınırlar değildir ve en iyi çaba temelinde dikkate alınır. Düşük olay oranlarında genellikle toplu iş boyutunun toplu iş başına istenen en fazla olaydan daha az olduğunu gözlemlersiniz.

  • Varsayılan ayar KAPALI

    Varsayılan olarak, Event Grid her teslim isteğine yalnızca bir olay ekler. Toplu işlemi açmanın yolu, olay aboneliği JSON'daki makalenin önceki bölümlerinde belirtilen ayarlardan birini ayarlamaktır.

  • Varsayılan değerler

    Olay aboneliği oluştururken hem ayarların (Toplu işlem başına en fazla olay sayısı hem de Kilo bayt cinsinden yaklaşık toplu iş boyutu) belirtilmesi gerekmez. Yalnızca bir ayar ayarlanırsa, Event Grid varsayılan değerleri (yapılandırılabilir) kullanır. Varsayılan değerler ve bunların nasıl geçersiz kılınacakları için aşağıdaki bölümlere bakın.

Azure portalı:

Bu ayarları Olay Aboneliği sayfasının Ek Özellikler sekmesinde görürsünüz.

Toplu İşlem bölümünün vurgulandığı Olay Aboneliği sayfasının Ek Özellikler sekmesinin eklendiği ekran görüntüsü.

Azure CLI

Olay aboneliği oluştururken aşağıdaki parametreleri kullanın:

  • toplu iş başına max-events - Toplu iş içindeki en fazla olay sayısı. 1 ile 5000 arasında bir sayı olmalıdır.
  • preferred-batch-size-in-kilobytes - Kilobayt cinsinden tercih edilen toplu iş boyutu. 1 ile 1024 arasında bir sayı olmalıdır.
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

Event Grid ile Azure CLI kullanma hakkında daha fazla bilgi için bkz . Azure CLI ile depolama olaylarını web uç noktasına yönlendirme.

Gecikmeli Teslim

Bir uç nokta teslim hatalarıyla karşılaştığında Event Grid, olayların bu uç noktaya teslimini ve yeniden denemesini geciktirmeye başlar. Örneğin, bir uç noktaya yayımlanan ilk 10 olay başarısız olursa, Event Grid uç noktanın sorun yaşadığını varsayar ve sonraki tüm yeniden denemeleri ve yeni teslimleri bir süre geciktirir ( bazı durumlarda birkaç saate kadar).

Gecikmeli teslimin işlevsel amacı, iyi durumda olmayan uç noktaları ve Event Grid sistemini korumaktır. İyi durumda olmayan uç noktalara teslimin geri alınması ve gecikmesi olmadan, Event Grid'in yeniden deneme ilkesi ve birim özellikleri sistemi kolayca bunaltabilir.

Teslim edilemeyen olaylar

Event Grid belirli bir süre içinde veya olayı belirli bir sayıda teslim etmeye çalıştıktan sonra bir olayı teslim edemeyen olayı bir depolama hesabına gönderebilir. Bu işlem, geçersiz harfleme olarak bilinir. Event Grid, aşağıdaki koşullardan biri karşılandığında bir olayı geçersiz olarak bildirir.

  • Etkinlik yaşam süresi içinde teslim edilmemiştir.
  • Olayı teslim etmeye çalışan deneme sayısı sınırı aştı.

Koşullardan biri karşılanırsa, olay bırakılır veya teslim edilmez. Event Grid varsayılan olarak teslim edilmeyen harfleri açmaz. Bunu etkinleştirmek için, olay aboneliğini oluştururken teslim edilmemiş olayları barındıracak bir depolama hesabı belirtmeniz gerekir. Teslimatları çözmek için bu depolama hesabından olayları çekersiniz.

Event Grid, tüm yeniden deneme girişimlerini denediğinde, bir olayı teslim edilemeyen ileti konumuna gönderir. Event Grid bir 400 (Hatalı İstek) veya 413 (İstek Varlığı Çok Büyük) yanıt kodu alırsa, olayı hemen teslim edilemeyen harfe çevirme için zamanlar. Bu yanıt kodları, olayın tesliminin hiçbir zaman başarılı olmadığını gösterir.

Yaşam süresi sona erme süresi, YALNIZCA bir sonraki zamanlanmış teslim denemesinde denetlendi. Bu nedenle, bir sonraki zamanlanmış teslim denemesi öncesinde yaşam süresi dolsa bile, olay süre sonu yalnızca bir sonraki teslimat sırasında denetlenip ardından teslim edilemedi olarak işaretlenir.

Son olay teslim girişimi ile teslim edilemeyen harf konumuna teslim edilme arasında beş dakikalık bir gecikme vardır. Bu gecikme, Blob depolama işlemlerinin sayısını azaltmaya yöneliktir. Teslim edilemeyen harf konumu dört saat boyunca kullanılamıyorsa, olay bırakılır.

Teslim edilemeyen harf konumunu ayarlamadan önce kapsayıcısı olan bir depolama hesabınız olmalıdır. Olay aboneliğini oluştururken bu kapsayıcı için uç noktayı sağlarsınız. Uç nokta şu biçimdedir: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>

Bir olay teslim edilemeyen mektup konumuna gönderildiğinde bildirim almak isteyebilirsiniz. Teslim edilmemiş olaylara yanıt vermek üzere Event Grid'i kullanmak için, teslim edilemeyen harf blob depolaması için bir olay aboneliği oluşturun. Teslim edilemeyen harf blob depolama alanınız teslim edilmemiş bir olayı her aldığında Event Grid işleyicinize bildirim gönderir. İşleyici teslim edilmemiş olayları mutabık hale getirmek için yapmak istediğiniz eylemlerle yanıt verir. Teslim edilemeyen bir konum ayarlama ve ilkeleri yeniden deneme örneği için bkz . Teslim edilemeyen harf ve yeniden deneme ilkeleri.

Not

Teslim edilemeyen ileti için yönetilen kimliği etkinleştirirseniz yönetilen kimliği, teslim edilemeyen olayları barındıracak Azure Depolama hesabındaki uygun rol tabanlı erişim denetimi (RBAC) rolüne eklemeniz gerekir. Daha fazla bilgi için bkz . Desteklenen hedefler ve Azure rolleri.

Teslim olayı biçimleri

Bu bölümde, farklı teslim şeması biçimlerinde (Event Grid şeması, CloudEvents 1.0 şeması ve özel şema) olaylara ve teslim edilemeyen olaylara örnekler verilmiştir. Bu biçimler hakkında daha fazla bilgi için bkz . Event Grid şeması ve Cloud Events 1.0 şema makaleleri.

Event Grid şeması

Etkinlik

{
    "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" }
    }
}

Teslim edilemeyen harf olayı

{
    "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" 
}

Olası değerleri lastDeliveryOutcome ve açıklamaları aşağıdadır.

LastDeliveryOutcome Açıklama
NotFound Hedef kaynak bulunamadı.
Devre dışı Hedef, alma olaylarını devre dışı bırakmış. Azure Service Bus ve Azure Event Hubs için geçerlidir.
Tam Hedefte izin verilen işlem sayısı üst sınırı aşıldı. Azure Service Bus ve Azure Event Hubs için geçerlidir.
Yetkisiz Hedef yetkisiz yanıt kodu döndürdü.
BadRequest Hedef hatalı istek yanıt kodu döndürdü.
TimedOut Teslim işlemi zaman aşımına uğradı.
Meşgul Hedef sunucu meşgul.
PayloadTooLarge İletinin boyutu hedef tarafından izin verilen boyut üst sınırını aştı. Azure Service Bus ve Azure Event Hubs için geçerlidir.
Şartlı tahliye Hedef, Event Grid tarafından denetimli olarak eklenir. Gözetim sırasında teslim girişiminde bulunulamaz.
İptal edildi Teslim işlemi iptal edildi.
İptal edildi Teslim, bir zaman aralığından sonra Event Grid tarafından durduruldu.
SocketError Teslim sırasında ağ iletişimi hatası oluştu.
ResolutionError Hedef uç noktanın DNS çözümlemesi başarısız oldu.
Teslim Olayları hedefe teslim etme.
SessionQueueNotSupported Oturum desteği etkinleştirilmiş bir varlıkta oturum kimliği olmadan olay teslimi denendi. Azure Service Bus varlık hedefi için geçerlidir.
Yasak Teslim, hedef uç nokta tarafından yasaklanmıştır (IP güvenlik duvarları veya diğer kısıtlamalar nedeniyle olabilir)
GeçersizAzureFunctionDestination Hedef Azure işlevi geçerli değil. Büyük olasılıkla EventGridTrigger türüne sahip olmadığı içindir.

LastDeliveryOutcome: Probation

Bir olay aboneliği, event deliveries to o hedefe başarısız olursa Event Grid tarafından bir süre için gözetim altına alınır. Deneme süresi, hedef uç nokta tarafından döndürülen farklı hatalar için farklıdır. Bir olay aboneliği deneme aşamasındaysa, olaylar, denetimli denetimde olduğu hata koduna bağlı olarak teslimi denemeden teslim edilmeden teslim edilmeyebilir veya bırakılmayabilir.

Hata Gözetim Süresi
Meşgul 10 saniye
NotFound 5 dakika
SocketError 30 saniye
ResolutionError 5 dakika
Devre dışı 5 dakika
Tam 5 dakika
TimedOut 10 saniye
Yetkisiz 5 dakika
Yasak 5 dakika
GeçersizAzureFunctionDestination 10 dakika

Not

Event Grid daha iyi teslim yönetimi için deneme süresini kullanır ve süre gelecekte değişebilir.

CloudEvents 1.0 şeması

Etkinlik

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

Teslim edilemeyen harf olayı

{
    "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",
}

Özel şema

Etkinlik

{
    "prop1": "my property",
    "prop2": 5,
    "myEventType": "fooEventType"
}

Teslim edilemeyen harf olayı

{
    "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"
    }
}

İleti teslim durumu

Event Grid, olayların alınmasını onaylamak için HTTP yanıt kodlarını kullanır.

Başarı kodları

Event Grid, başarılı teslimatlar olarak yalnızca aşağıdaki HTTP yanıt kodlarını dikkate alır. Diğer tüm durum kodları başarısız teslimat olarak kabul edilir ve uygun şekilde yeniden denenecek veya geçersiz sayılacaktır. Event Grid başarılı bir durum kodu aldığında teslimin tamamlanmasını dikkate alır.

  • 200 Tamam
  • 201 Oluşturuldu
  • 202 Kabul Edildi
  • 203 Yetkili Olmayan Bilgiler
  • 204 İçerik yok

Hata kodları

Kümede olmayan diğer tüm kodlar (200-204) hata olarak kabul edilir ve (gerekirse) yeniden denenecektir. Bazılarında burada özetlenen belirli yeniden deneme ilkeleri vardır, diğerleri standart üstel geri alma modelini izler. Event Grid mimarisinin yüksek oranda paralelleştirilmiş yapısı nedeniyle yeniden deneme davranışının belirleyici olmadığını aklınızda bulundurmak önemlidir.

Durum kodu Yeniden deneme davranışı
400 Hatalı İstek Yeniden denenmedi
401 Yetkisiz Azure Kaynakları Uç Noktaları için 5 dakika veya daha fazla süre sonra yeniden deneyin
403 Yasak Yeniden denenmedi
404 Bulunamadı Azure Kaynakları Uç Noktaları için 5 dakika veya daha fazla süre sonra yeniden deneyin
408 İstek Zaman Aşımı 2 dakika veya daha fazla süre sonra yeniden deneyin
413 İstek Varlığı Çok Büyük Yeniden denenmedi
503 Hizmet Kullanılamıyor 30 saniye veya daha fazla süre sonra yeniden deneyin
Diğerleri 10 saniye veya daha fazla süre sonra yeniden deneyin

Özel teslim özellikleri

Olay abonelikleri, teslim edilen olaylara dahil edilen HTTP üst bilgilerini ayarlamanıza olanak tanır. Bu özellik, bir hedef için gereken özel üst bilgileri ayarlamanıza olanak tanır. Olay aboneliği oluştururken en fazla 10 üst bilgi ayarlayabilirsiniz. Her üst bilgi değeri 4.096 (4K) bayttan büyük olmamalıdır. Aşağıdaki hedeflere teslim edilen olaylar üzerinde özel üst bilgiler ayarlayabilirsiniz:

  • Web kancaları
  • Azure Service Bus konuları ve kuyrukları
  • Azure Event Hubs
  • Geçiş Karma Bağlantıları

Daha fazla bilgi için bkz . Özel teslim özellikleri.

Sonraki adımlar