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 attempts
hem 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.
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
- Olay teslimlerinin durumunu görüntülemek için bkz. Event Grid ileti teslimini izleme.
- Olay teslim seçeneklerini özelleştirmek için bkz . Teslim edilemeyen harf ve yeniden deneme ilkeleri.