Mesaj gönderim teslimi ve ad alanı başlıklarıyla yeniden deneme

Event Grid ad alanları gönderme teslimi dayanıklı teslim sağlar. Event Grid, 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. Event Grid varsayılan olarak aboneye bir kerede bir olay teslim eder.

Uyarı

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

Olay aboneliği

Olay aboneliği, tek bir ad alanı konusuyla ilişkilendirilmiş bir yapılandırma kaynağıdır. Diğer şeylerin yanı üzere, bir konu başlığında bulunan toplam olay kümesi dışında abonenin kullanabileceği olay koleksiyonunu tanımlamak üzere olay seçim ölçütlerini ayarlamak için bir olay aboneliği kullanırsınız. Olay aboneliği kullanarak, olayların gönderildiği hedef uç noktayı da tanımlarsınız. Ayrıca olay aboneliği, olay tesliminin çalışma zamanı davranışını tanımlayan maksimum teslim yeniden deneme sayısı ve olayların yaşam süresi gibi diğer özellikleri ayarlamanıza olanak tanır.

Zamanlamayı yeniden deneyin

Event Grid bir olay teslim girişimi için hata aldığında, Event Grid hatanın türüne göre teslimi yeniden deneyip denemeyeceğine karar verir.

Abone olunan uç noktadan dönen hata, yapılandırmayla ilgili bir hataysa ve yeniden denemelerle düzeltilemiyorsa, Event Grid olayı önceden kaydedilmiş bir teslim edilemeyen hedefe gönderir. Hiçbir ölü harf yapılandırılmamışsa, olay bırakılır. Örneğin, olay aboneliğinde yapılandırılan uç noktaya silindiği için ulaşılamadığı zaman bir olay teslim edilemedi veya bırakıldı. Teslim yeniden denemesi aşağıdaki koşullar ve hatalar için gerçekleşmez:

Koşullar:

  • ArgumentException
  • TimeoutException
  • UnauthorizedAccessException
  • OperationCanceledException
  • SocketException |

Hata kodları

  • 404 - NotFound
  • 401 - Unauthorized
  • 403 - Forbidden
  • 400 -BadRequest
  • 414 RequestUriTooLong

Uyarı

Bir uç nokta için ölü harf kuyruğu yapılandırılmamışsa, yukarıdaki hatalar veya koşullar gerçekleştiğinde olaylar göz ardı edilir. Bu tür olayların bırakılmasını istemiyorsanız olay aboneliğinizde geçersiz harf yapılandırmayı göz önünde bulundurun. Ölü mektup hedefi bulunamazsa, ölü mektup olayları atılır.

Abone olunan uç nokta tarafından döndürülen koşul veya hata yukarıdaki listelerde yer almıyorsa, Event Grid aşağıdaki üstel geri alma yeniden deneme zamanlamasını kullanarak temel çaba temelinde yeniden dener:

  • 0 saniye (hemen yeniden deneme)
  • 10 saniye
  • 30 saniye
  • 1 dakika
  • 5 dakika

5 dakika sonra Event Grid, olay teslim edilene veya maksimum yeniden deneme sayısına veya olayın zaman aşımı süresine ulaşılana kadar 5 dakikada bir yeniden denemeye devam eder.

Yeniden deneme ilkesi

Aşağıdaki iki olay aboneliği yapılandırma özelliğini kullanarak yeniden deneme ilkesini özelleştirebilirsiniz. Bir olay bırakılır (geçersiz harf yapılandırılmaz) veya özelliklerden biri yapılandırılmış sınırına ulaşırsa geçersiz harfe dönüştürülür.

  • En fazla teslim sayısı - Değer 1 ile 10 arasında bir tamsayı olmalıdır. Varsayılan değer 10'dur. Bu özellik, push teslimatı için maksimum teslim denemelerini tanımlar.
  • Veri Tutma - Bu özellik event time to live olarak da bilinir. Değer, dakika hassasiyetinde bir ISO 8601 süre değeri olmalıdır. Olayın yayımlandığı zamandan itibaren bu özellik, iletinin süresinin dolmasına kadar olan süreyi tanımlar. İzin verilen en düşük değer "PT1M" (1 dakika) olur. İzin verilen en yüksek değer 7 gündür veya temel konu başlığının saklama süresidir (hangisi daha düşükse). Azure portalı, günleri, saatleri ve dakikaları tamsayı olarak belirttiğiniz basit bir kullanıcı deneyimi sağlar.

Uyarı

her ikisini de RetentionMaximum delivery countayarlarsanız, Event Grid olay teslimini ne zaman durduracağını belirlemek için bunları kullanır. Herhangi biri olay teslimini durdurur. Örneğin, bekletme süresini 20 dakika ve maksimum teslim deneme sayısını 10 olarak ayarlarsanız, bu, bir olayın 20 dakika içinde teslim edilmediği veya 10 denemeden sonra teslim başarısız olduğu (hangisi önce gerçekleşirse) durumlarda olayın "ölü mektup" olarak işaretleneceği anlamına gelir. Ancak, yeniden deneme zamanlaması nedeniyle en fazla teslim denemesi sayısını 10 olarak ayarlamanın hiçbir etkisi yoktur çünkü olaylar 20 dakika sonra ilk olarak geçersiz olarak kaydedilecektir. Bunun nedeni dakika 20'de teslim girişiminin #8 (0, 10s, 30s, 1m, 5m, 10m, 15m, 20m) gerçekleşmesidir, ancak o zaman olay geçersiz olur.

Çıkışı toplu işleme

Hedef uç nokta türü olarak Web kancalarını kullandığınızda, Event Grid varsayılan olarak her olayı abonelere tek tek gönderir. 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şleme varsayılan olarak devre dışıdır ve her olay aboneliği için etkinleştirilebilir.

Event Hubs'ı hedef uç nokta türü olarak kullanırken Event Grid her zaman en yüksek verimlilik ve performans için olayları toplu işler. Varsayılan olarak Event Grid, Azure Event Hubs'a teslim ederken toplu işlem davranışını işlediği için toplu iş ilkesi yapılandırması yoktur.

Toplu işlem ilkesi

Toplu teslim iki ayara sahiptir:

  • Küme başına en fazla olay - Event Grid'in her küme başına teslim ettiği maksimum olay sayısı. Değer 1 ile 5.000 arasında bir tamsayı olmalıdır. Bu sayı hiçbir zaman aşılmaz. Ancak, teslim sırasında başka olay yoksa daha az olay teslim edilebilir. Event Grid, daha az olay varsa toplu iş oluşturmak için olayları geciktirmiyor.
  • Kilobayt cinsinden tercih edilen toplu iş boyutu - Kilobayt cinsinden toplu iş boyutu için hedef tavan. Değer 1 ile 1024 arasında bir sayı olmalıdır. En büyük olaylara benzer şekilde, teslim sırasında yeterli sayıda 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 olay Event Grid'e gönderiliyorsa, 10 KB olay bırakılmak yerine teslim edilir.

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ısını desteklemez. Aboneler, bir toplu işte sadece 30 saniye içinde makul bir şekilde işleyebilecekleri sayıda olayı istemeye dikkat etmelidir.

  • ** İyimser toplu işleme

    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, toplu iş boyutunun genellikle 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 , Toplu işlem ilkesinde belirtilen ayarlardan birini ayarlamaktır.

  • Varsayılan değerler

    Olay aboneliği oluştururken her iki ayarın da (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. 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 veya olay aboneliği oluşturulduktan sonra, Olay Aboneliğine erişirken Yapılandırma menü seçeneğinde 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ü.

Teslim edilemeyen olaylar

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

  • Olay, time-to-live (olay aboneliğinde tanımlanan saklama süresi) süresi içinde teslim edilmez.
  • Olayı teslim etme deneme sayısı sınırı aştı.

Her iki koşuldan biri karşılanırsa, olay iptal edilir veya başarısız olay kuyruğuna taşınır. Event Grid varsayılan olarak ölü harf kuyruğunu (dead-lettering) açmaz. Bunu etkinleştirmek için, olay aboneliğini oluştururken teslim edilmemiş olayları barındıracak bir depolama hesabı belirtmeniz gerekir. Teslimatları yönetmek için bu depolama hesabındaki olayları okursunuz.

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

Sonlanma süresi, YALNIZCA bir sonraki zamanlanmış teslim girişiminde denetlenir. Bu nedenle, bir sonraki zamanlanmış teslim denemesi öncesinde yaşam süresi dolsa bile, olayın süre sonu yalnızca bir sonraki teslimat sırasında kontrol edilip ardından ölü harf kutusuna atılır.

Son olay teslim girişimi ile başarısız postalama 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.

Ölü-mektup konumunu ayarlamadan önce, kapsayıcıya sahip 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 ölü harf konumuna gönderildiğinde bildirim almak isteyebilirsiniz. Teslim edilmemiş etkinliklere yanıt vermek için Event Grid'i kullanmak üzere, ölü harf blob depolaması için bir etkinlik 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ı çözümlemek için yapmak istediğiniz eylemlerle yanıt verir.

Teslim edilemeyen postayı (dead-lettering) yapılandırırken, yönetilen kimliğini, teslim edilemeyen olayları barındıracak Azure Depolama hesabında 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

CloudEvents 1.0 şemasını kullanarak olaylara ve ölü harfli olaylara örnekler bu bölümde, ad alanı konularında desteklenen ileti meta veri biçimi kapsamında verilmiştir.

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 mesaj olayı

[
  {
    "deadLetterProperties": {
      "deadletterreason": "Maximum delivery attempts was exceeded.",
      "deliveryattempts": 1,
      "deliveryresult": "Event was not acknowledged nor rejected.",
      "publishutc": "2023-11-01T20:33:51.4521467Z",
      "deliveryattemptutc": "2023-11-01T20:33:52.3692079Z"
    },
    "event": {
      "comexampleextension1": "value1",
      "id": "A234-1234-1234",
      "comexampleothervalue": "5",
      "datacontenttype": "text/xml",
      "specversion": "1.0",
      "time": "2018-04-05T17:31:00Z",
      "source": "/mycontext",
      "type": "com.example.someevent",
      "data": <your-event-data>
    }
  }
]

Son Teslimat Sonucu: Deneme Süresi

Hedefe olay teslimi başarısız olursa, bir olay aboneliği Event Grid tarafından bir süre için deneme sürecine 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 denetim aşamasındaysa, aboneliğin denetim aşamasında olmasına neden olan hata koduna bağlı olarak olaylar, teslimat hiç denenmeden başarısız olarak işaretlenebilir veya iptal edilebilir.

Error Gözetim Süresi
Meşgul 10 saniye
Bulunamadı 5 dakika
SocketError 30 saniye
Çözünürlük Hatası 5 dakika
Disabled 5 dakika
Full 5 dakika
Zaman Aşımı 10 saniye
Yetkisiz 5 dakika
Yasak 5 dakika
Geçersiz Azure İşlev Hedefi 10 dakika

Uyarı

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

İ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 teslimatlar olarak kabul edilir ve uygun şekilde yeniden denenecek veya teslim edilmeyecektir. 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ının aşağıda özetlenen belirli yeniden deneme ilkeleri vardır, diğerleri standart yeniden deneme zamanlamasını 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 Birimi Ç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 olaylarla birlikte gelen 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 başlık 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:

  • Webhook'lar
  • Azure Event Hubs

Sonraki Adımlar