Event Grid ileti teslimi ve yeniden deneme

Event Grid dayanıklı teslim sağlar. Eşleşen her 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. Varsayılan olarak, Event Grid 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ı sıra dışı olarak alabilir.

Zamanlamayı yeniden dene

Event Grid bir olay teslim denemesi için hata aldığında, Event Grid teslimi yeniden denemesi, olayı teslim etmemesi veya hatanın türüne göre olayı bırakması 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 silindiyse), 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, ölü harfli 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 deneme için kuyruğa alınmış olur. 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
  • 24 saate kadar her 12 saatte bir

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 rastgelelik ekler ve uç nokta sürekli olarak iyi durumda değilse, uzun bir süre boyunca kapalıysa 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) öğesini 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 30 dakika sonra teslim edilmediğinde (veya) 5 denemeden 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 denemesi sayısını 10 olarak ayarlarsanız, 30 dakika TTL'ye ulaşılmadan önce en fazla 6 teslim denemesi gerçekleşir, 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 olayı olan 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 olarak yapılandırabilirsiniz. Toplu işlem varsayılan olarak kapalıdır ve abonelik başına açılabilir.

Toplu işlem ilkesi

Toplu teslim iki ayara sahiptir:

  • Toplu iş başına en fazla olay - Event Grid'in toplu iş başına en fazla olay teslimi 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ı geciktirmez. 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 büyükse , bir toplu iş tercih edilen toplu iş boyutundan daha büyük olabilir. Örneğin, tercih edilen boyut 4 KB ise ve Event Grid'e 10 KB'lık bir olay gönderilirse, 10 KB'lık olay bırakılmak yerine kendi toplu işlemiyle teslim edilir.

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

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ışında katı sınırlar değildir ve en iyi çaba temelinde dikkate alınır. Düşük olay hızlarında, toplu iş boyutunun genellikle toplu iş başına istenen en yüksek olaydan daha az olduğunu gözlemlersiniz.

  • Varsayılan ayar KAPALI olarak ayarlanmıştır

    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'un makalesinde daha önce bahsedilen 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ı ve Kilo bayt cinsinden yaklaşık toplu iş boyutu) belirtilmesi gerekmez. Yalnızca bir ayar ayarlanırsa Event Grid varsayılan değerleri kullanır (yapılandırılabilir). 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:

  • max-events-per-batch - 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 bazı durumlarda birkaç saate kadar sonraki tüm yeniden denemeleri ve yeni teslimleri bir süre geciktirir.

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 sayıda teslim etmeye çalıştıktan sonra bir olayı teslim edemeyen olayı bir depolama hesabına gönderebilir. Bu işlem , teslim edilemeyen harf olarak bilinir. Event Grid, aşağıdaki koşullardan biri karşılandığında bir olayı geçersiz harfe çevirir.

  • Etkinlik yaşam süresi içinde teslim edilmemiştir.
  • Olayı teslim etme denemelerinin 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 edilemeyen 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ı çözümlemek için bu depolama hesabından olayları çekersiniz.

Event Grid, tüm yeniden deneme girişimlerini denediğinde bir olayı teslim edilemeyen harf 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 edilemeyecek şekilde 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 denetlenecek. Bu nedenle, yaşam süresi bir sonraki zamanlanmış teslim denemesi öncesinde dolsa bile, olay süre sonu yalnızca bir sonraki teslim sırasında denetlenip ardından teslim edilemedi.

Son olay teslim etme girişimiyle teslim edilmediği konuma teslim edilme süresi 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 harfin konumunu ayarlamadan önce kapsayıcılı bir depolama hesabınız olmalıdır. Olay aboneliğini oluştururken bu kapsayıcının uç noktasını 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 harf konumuna gönderildiğinde bildirim almak isteyebilirsiniz. Teslim edilemeyen olaylara yanıt vermek üzere Event Grid'i kullanmak için teslim edilemeyen harf blob depolama için bir olay aboneliği oluşturun . Teslim edilemeyen harfli blob depolama alanınız teslim edilemeyen bir olayı her aldığında Event Grid işleyicinize bildirimde bulunur. İşleyici teslim edilmemiş olayları uzlaştırmak için yapmak istediğiniz eylemlerle yanıt verir. Teslim edilemeyen bir konum ve yeniden deneme ilkeleri ayarlama örneği için bkz . Teslim edilemeyen harf ve yeniden deneme ilkeleri.

Not

Teslim edilemeyen posta 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 Event Grid şeması ve Bulut Olayları 1.0 şema makalelerine bakın.

Olay Kılavuz şeması

Olay

{
    "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 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 yoklama içine konur. Denetimli serbestlik sırasında teslimat denenmiyor.
İ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 Hedef uç nokta tarafından teslim yasaktı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: Yoklama

Olay aboneliği, event delivers to o hedefe başarısız olursa Event Grid tarafından bir süre için yoklamaya konur. Deneme süresi, hedef uç nokta tarafından döndürülen farklı hatalar için farklıdır. Bir olay aboneliği denetimli serbestlik durumundaysa, olaylar, yoklamada olduğu hata koduna bağlı olarak teslimi denemeden teslim edilmeden teslim edilmeyebilir veya bırakılabilir.

Hata Yoklama 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 yoklama süresini kullanır ve süre gelecekte değişebilir.

CloudEvents 1.0 şeması

Olay

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

Olay

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

Teslim edilemeyen 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ındını onaylamak için HTTP yanıt kodlarını kullanır.

Başarı kodları

Event Grid , başarılı teslimler olarak yalnızca aşağıdaki HTTP yanıt kodlarını dikkate alır. Diğer tüm durum kodları başarısız teslimler 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ı

Yukarıdaki kümede (200-204) bulunmayan diğer tüm kodlar hata olarak kabul edilir ve (gerekirse) yeniden denenecektir. Bazılarında aşağıda özetlenen belirli yeniden deneme ilkeleri vardır ve 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, hedefin gerektirdiği ö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 olaylarda özel üst bilgiler ayarlayabilirsiniz:

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

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

Sonraki adımlar