Event Grid teslim ve yeniden deneme

Event Grid dayanıklı teslim sağlar. Eşleşen her abonelik için her iletiyi hemen en az bir kez teslim etmeye çalışır. Abonenin uç noktası bir olayın alınarak alınamaysa veya bir hata varsa, Event Grid yeniden deneme zamanlaması ve yeniden deneme ilkesine göre teslimi yeniden deneyin. Varsayılan olarak, Event Grid modülü aboneye aynı anda bir olay teslim eder. Ancak yük, tek bir olayı olan bir dizidir.

Not

Event Grid, olay teslimi için siparişi garanti etmez, bu nedenle aboneler bunları sipariş dışında alır.

Yeniden deneme zamanlaması

EventGrid bir olay teslim girişimi için bir hata aldığında EventGrid, hatanın türüne göre teslimi yeniden denemesi, olayı teslimi teslimi teslim edip bırakması veya bırakması gerektiğine karar verir.

Abone olunan uç nokta tarafından döndürülen hata, yeniden denemelerle düzeltilemayacak yapılandırmayla ilgili bir hata ise (örneğin, uç nokta silinirse), EventGrid olayda etkin olmayan harf yazma işlemi gerçekleştirecek veya etkin olmayan harf yapılandırılmamışsa olayı bırakır.

Aşağıdaki tabloda, yeniden denemenin gerçekleştirilememe durumuyla ilgili uç nokta ve hata türleri açık almaktadır:

Uç Nokta Türü Hata kodları
Azure Kaynakları 400 Hatalı İstek, 413 İstek Varlığı Çok Büyük, 403 Yasak
Web Kancası 400 Hatalı İstek, 413 İstek Varlığı Çok Büyük, 403 Yasak, 404 Bulunamadı, 401 Yetkisiz

Not

Bir Dead-Letter uç nokta için yapılandırılmamışsa, yukarıdaki hatalar olduğunda olaylar bırakılır. Bu tür Dead-Letter bırakılan olayları istemiyorsanız bu tür olayları yapılandırmayı düşünün.

Abone olunan uç nokta tarafından döndürülen hata yukarıdaki listede yer alıyorsa, EventGrid aşağıda açıklanan ilkeleri kullanarak yeniden denemeyi gerçekleştirir:

Event Grid ileti teslim edildikten sonra yanıt için 30 saniye bekler. 30 saniye sonra uç nokta yanıt vermemişse ileti yeniden denemek için kuyruğa eklenir. Event Grid olay teslimi için üstel geri ödeme yeniden deneme ilkesi kullanır. Event Grid en iyi çaba temelinde aşağıdaki zamanlamayı yeniden denentir:

  • 10 saniye
  • 30 saniye
  • 1 dakika
  • 5 dakika
  • 10 dakika
  • 30 dakika
  • 1 saat
  • 3 saat
  • 6 saat
  • 24 saate kadar 12 saatte bir

Uç nokta 3 dakika içinde yanıt verirse, Event Grid yeniden deneme kuyruğundan en iyi çaba temelinde olayı kaldırmaya çalışsa da yinelemeler yine de alınabilirsiniz.

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

Yeniden Deneme ilkesi

Aşağıdaki iki yapılandırmayı kullanarak bir olay aboneliği oluştururken yeniden deneme ilkesi özelleştirebilirsiniz. Yeniden deneme ilkesi sınırlarına ulaşıldı ise 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 ilkesi ayarlama.

Çıkışı toplu işleme

Event Grid her olayı abonelere tek tek göndermek için varsayılan olarak kullanılır. Abone, tek bir olay içeren bir dizi alır. Yüksek aktarım Event Grid gelişmiş HTTP performansı için teslim için olayları toplu olarak yapılandırabilirsiniz. Toplu işleme varsayılan olarak kapalıdır ve abonelik başına açık olabilir.

Toplu işlem ilkesi

Toplu teslimin iki ayarı vardır:

  • Toplu iş başına en fazla olay sayısı - Toplu Event Grid teslim edecek olay sayısı. Bu sayı hiçbir zaman aşılır, ancak yayımlama zamanında başka olay yoksa daha az olay teslim edilir. Event Grid, daha az olay varsa toplu iş oluşturmak için olayları geciktirmez. 1 ile 5.000 arasında olması gerekir.
  • Kilobayt cinsinden tercih edilen toplu iş boyutu - Kilobayt cinsinden toplu iş boyutu için hedef tavan. En fazla olaylara benzer şekilde, yayımlama zamanında daha fazla olay yoksa toplu iş boyutu daha küçük olabilir. Tek bir olay tercih edilen boyuttan büyükse, toplu iş tercih edilen toplu iş boyutundan daha büyük olabilir. Örneğin, tercih edilen boyut 4 KB ise ve 10 KB'lık bir olay Event Grid'a itilirse, 10 KB'lık olay yine de bırakılırken değil kendi toplu iş içinde 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ışı

  • Hepsi veya hiçbiri

    Event Grid veya hiç semantiğiyle çalışır. Toplu teslimin kısmi başarısını desteklemez. Aboneler, toplu iş başına yalnızca 60 saniye içinde makul bir şekilde işleyene kadar olay istemek için dikkatli olmalıdır.

  • İyimser toplu işlem

    Toplu işlem ilkesi ayarları, toplu işleme davranışına sıkı sınır değildir ve en iyi çaba temelinde kabul edilir. Düşük olay hızları ile toplu iş boyutunun, toplu iş başına istenen maksimum olay sayısına göre daha az olduğunu gözlemlersiniz.

  • Varsayılan ayar OFF 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'sinde makalenin başlarında bahsedilen ayarlardan birini ayarlamakdır.

  • Varsayılan değerler

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

Azure portal:

Toplu teslim ayarları

Azure CLI

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

  • max-events-per-batch - Bir toplu iş içinde en fazla olay sayısı. 1 ile 5000 arasında bir sayı olması gerekir.
  • kilobayt cinsinden tercih edilen toplu iş boyutu - Kilobayt cinsinden tercih edilen toplu iş boyutu. 1 ile 1024 arasında bir sayı olması gerekir.
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

Azure CLI'sini azure cli ile kullanma hakkında Event Grid için bkz. Azure CLI ile depolama olaylarını web uç noktasına yönlendirme.

Gecikmeli Teslim

Uç nokta teslim hatalarına yol Event Grid, bu uç noktada olayların teslimi ve yeniden denemesi gecikmeye başlar. Örneğin, bir uç noktada yayımlanan ilk 10 olay başarısız olursa Event Grid uç noktada sorun yaşandığını varsayacak ve sonraki tüm yeniden denemeleri ve yeni teslimleri bir süre geciktirecek ( bazı durumlarda birkaç saate kadar).

Gecikmeli teslimin işlevsel amacı, iyi durumda olmayan uç noktaları ve sistem Event Grid korumaktır. Geri kapatma ve iyi durumda olmayan uç noktalara teslim gecikmesi olmadan, Event Grid ilke ve birim özellikleri bir sistemi kolayca bunaltabilir.

Harf olmayan olaylar

Belirli Event Grid süre içinde veya olayı belirli bir sayıda teslim etmeye çalışan bir olay teslim edilemeye çalışıldıktan sonra, teslim edilmeyen olayı bir depolama hesabına gönderebilir. Bu işlem, harfini geri yazma olarak bilinir. Event Grid koşullardan biri karşı olduğunda bir olayı büyük harfle yazarak yeniden yazın.

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

Koşullardan herhangi biri karşılandı ise, olay bırakılır veya posta ile geri bırakılır. Varsayılan olarak Event Grid, teslim olmayan harfi açmaz. Bunu etkinleştirmek için olay aboneliğini oluştururken teslim edilemeyen olayları tutmak için bir depolama hesabı belirtmeniz gerekir. Teslimleri çözümlemek için bu depolama hesabından olayları çekersiniz.

Event Grid, tüm yeniden deneme girişimlerini denemiş durumdayken bir olayı geri göndermez konuma gönderir. Bu Event Grid 400 (Hatalı İstek) veya 413 (İstek Varlığı Çok Büyük) yanıt kodu alıyorsa, olayı hemen geri bildirim için zamanlar. Bu yanıt kodları, olayın teslimi hiçbir zaman başarılı olmaz.

Yaşam süresi sona erme süresi YALIZLA bir sonraki zamanlanmış teslim denemesi sırasında denetlenir. Bu nedenle, yaşam süresi bir sonraki zamanlanmış teslim denemesi öncesinde sona erse bile, olay süre sonu yalnızca bir sonraki teslim sırasında denetlenir ve ardından teslim edilir.

Bir olayı teslim etmek için son deneme ile teslim edilen harfin teslimi arasında beş dakikalık bir gecikme olur. Bu gecikme, Blob depolama işlemlerinin sayısını azaltmaya yöneliktir. Son harfin konumu dört saat boyunca kullanılamıyorsa olay bırakılır.

Büyük/küçük harf konumunu ayarlamadan önce kapsayıcılı bir depolama hesabınız olması gerekir. 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, gönderilmemiş harfli konuma gönder geldiğinde size bildirilecek. Teslim Event Grid yanıt vermek üzere bir olay aboneliği oluşturmak üzere teslim edilemeyen blob depolama için bir olay aboneliği oluşturun. Teslim edilmeyen blob depolama alanınız teslim edilmeyen bir olay aldığında Event Grid bilgi alır. İşleyici, teslim edilmeyen olayları mu mutabakat için yapmak istediğiniz eylemlerle yanıt verir. Bir eski harf konumu ve yeniden deneme ilkeleri ayarlama örneği için bkz. Eski harf ve yeniden deneme ilkeleri.

Teslim olayı biçimleri

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

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

Geri gelen 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" 
}

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

Geri gelen 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

Olay

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

Geri gelen 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ınarak kabul etmek 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 almaktadır. Diğer tüm durum kodları başarısız teslim olarak kabul edilir ve uygun şekilde yeniden denenecek veya geçersiz olarak kabul edilir. Başarılı bir durum kodu aldıktan sonra Event Grid tamamlanır.

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

Hata kodları

Yukarıdaki kümede yer alan diğer tüm kodlar (200-204) hata olarak kabul edilir ve yeniden denenecek (gerekirse). Bazılarında aşağıda özetlenen belirli yeniden deneme ilkeleri vardır, diğerleri ise standart üstel geri kapatma modelini takip eder. Event Grid mimarisinin yüksek düzeyde paralelleştirilmiş yapısı nedeniyle yeniden deneme davranışının belirleyici olmadığını unutmayın.

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

Özel teslim özellikleri

Olay abonelikleri, teslim edilen olaylara dahil olan HTTP üst bilgilerini ayarlamaya olanak sağlar. Bu özellik, bir hedef için gereken özel üst bilgileri ayarlamanızı sağlar. Olay aboneliği oluştururken en fazla 10 üst bilgi kurabilirsiniz. Her üst bilgi değeri 4.096 (4K) bayttan büyük olmaması gerekir. Aşağıdaki hedeflere teslim edilen olaylar üzerinde özel üst bilgiler oluşturabilirsiniz:

  • 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