İleti teslimini Event Grid ve yeniden deneyinEvent Grid message delivery and retry

Bu makalede, teslimin onaylanmaması durumunda Azure Event Grid olayların nasıl işleyeceği açıklanır.This article describes how Azure Event Grid handles events when delivery isn't acknowledged.

Event Grid dayanıklı teslim sağlar.Event Grid provides durable delivery. Her bir abonelik için her iletiyi en az bir kez sunar.It delivers each message at least once for each subscription. Olaylar, her aboneliğin kayıtlı uç noktasına hemen gönderilir.Events are sent to the registered endpoint of each subscription immediately. Bir uç nokta bir olayın alındığını kabul etmezse, olayın yeniden denenmesini Event Grid.If an endpoint doesn't acknowledge receipt of an event, Event Grid retries delivery of the event.

Toplu olay teslimiBatched event delivery

Her bir olayı abonelere ayrı olarak göndermek Event Grid varsayılan değer.Event Grid defaults to sending each event individually to subscribers. Abone tek bir olaya sahip bir dizi alır.The subscriber receives an array with a single event. Yüksek işleme senaryolarında iyileştirilmiş HTTP performansına yönelik teslimin gönderilmesi için Event Grid yapılandırabilirsiniz.You can configure Event Grid to batch events for delivery for improved HTTP performance in high-throughput scenarios.

Toplu teslimin iki ayarı vardır:Batched delivery has two settings:

  • Toplu iş başına en fazla olay sayısı Event Grid toplu işlem başına teslim edilecek en fazla olay sayısıdır.Max events per batch is the maximum number of events Event Grid will deliver per batch. Bu sayı hiçbir zaman aşılmayacak, ancak yayımlama sırasında başka hiçbir olay yoksa daha az olay teslim edilebilir.This number will never be exceeded, however fewer events may be delivered if no other events are available at the time of publish. Daha az etkinlik varsa Batch oluşturmak için olayları gecikmez Event Grid.Event Grid does not delay events in order to create a batch if fewer events are available. 1 ile 5.000 arasında olmalıdır.Must be between 1 and 5,000.
  • Kilobayt olarak tercih edilen toplu iş boyutu, kilobayt cinsinden toplu iş boyutu için hedef tavan.Preferred batch size in kilobytes is the target ceiling for batch size in kilobytes. En yüksek olaylara benzer şekilde, yayımlama sırasında daha fazla olay yoksa, toplu iş boyutu daha küçük olabilir.Similar to max events, the batch size may be smaller if more events are not available at the time of publish. Tek bir olay tercih edilen boyuttan daha büyükse bir toplu iş, tercih edilen toplu iş boyutundan daha büyük olabilir.It is possible that a batch is larger than the preferred batch size if a single event is larger than the preferred size. Örneğin, tercih edilen boyut 4 KB ise ve 10 KB 'lik bir olay Event Grid 'e itiliyorsa, 10 KB 'lik olay bırakılması yerine kendi toplu işinde de teslim edilir.For example, if the preferred size is 4 KB and a 10-KB event is pushed to Event Grid, the 10-KB event will still be delivered in its own batch rather than being dropped.

Portal, CLı, PowerShell veya SDK 'lar aracılığıyla olay başına abonelik temelinde yapılandırılmış toplu teslim.Batched delivery in configured on a per-event subscription basis via the portal, CLI, PowerShell, or SDKs.

Toplu teslim ayarları

Zamanlamayı ve süreyi yeniden deneRetry schedule and duration

Event Grid bir ileti teslim ettikten sonra yanıt için 30 saniye bekler.Event Grid waits 30 seconds for a response after delivering a message. 30 saniye sonra, uç nokta yanıt vermediyse ileti yeniden denenmek üzere sıraya alınır.After 30 seconds, if the endpoint hasn’t responded, the message is queued for retry. Event Grid, olay teslimi için bir üstel geri alma yeniden deneme İlkesi kullanır.Event Grid uses an exponential backoff retry policy for event delivery. En iyi çaba temelinde aşağıdaki zamanlamaya göre teslimi yeniden Event Grid:Event Grid retries delivery on the following schedule on a best effort basis:

  • 10 saniye10 seconds
  • 30 saniye30 seconds
  • 1 dakika1 minute
  • 5 dakika5 minutes
  • 10 dakika10 minutes
  • 30 dakika30 minutes
  • 1 saat1 hour
  • 24 saate kadar saatlikHourly for up to 24 hours

Uç nokta 3 dakika içinde yanıt verirse Event Grid, olayı en iyi çaba temelinde yeniden deneme sırasından kaldırmayı dener, ancak yinelemeler yine de alınabilir.If the endpoint responds within 3 minutes, Event Grid will attempt to remove the event from the retry queue on a best effort basis but duplicates may still be received.

Event Grid, tüm yeniden deneme adımlarına küçük bir rastgele seçim ekler ve bir uç nokta sürekli sağlıksız, uzun bir süre boyunca azaltılamadığında ya da yoğun bir şekilde göründüğünden belirli yeniden denemeleri atlayabilir mümkün olduğunda olabilir.Event Grid adds a small randomization to all retry steps and may opportunistically skip certain retries if an endpoint is consistently unhealthy, down for a long period, or appears to be overwhelmed.

Belirleyici davranış için, olay süresini, abonelik yeniden deneme ilkelerindekicanlı ve en fazla teslimat denemesine ayarlayın.For deterministic behavior, set the event time to live and max delivery attempts in the subscription retry policies.

Varsayılan olarak Event Grid, 24 saat içinde teslim edilmeyen tüm olayları sona ermez.By default, Event Grid expires all events that aren't delivered within 24 hours. Olay aboneliği oluştururken yeniden deneme ilkesini özelleştirebilirsiniz .You can customize the retry policy when creating an event subscription. Maksimum teslim denemesi sayısı (varsayılan değer 30) ve olay yaşam süresi (varsayılan değer 1440 dakikadır) sağlarsınız.You provide the maximum number of delivery attempts (default is 30) and the event time-to-live (default is 1440 minutes).

Gecikmeli teslimDelayed Delivery

Bir uç nokta teslim hatalarıyla karşılaşıyorsa, Event Grid bu uç noktada olayların teslimini ve yeniden denenmesini geciktirmeyi dener.As an endpoint experiences delivery failures, Event Grid will begin to delay the delivery and retry of events to that endpoint. Örneğin, bir uç noktada 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 teslimler için birkaç saate kadar bir süre sonra geciktirecek olur.For example, if the first 10 events published to an endpoint fail, Event Grid will assume that the endpoint is experiencing issues and will delay all subsequent retries and new deliveries for some time - in some cases up to several hours.

Gecikmeli teslimin işlevsel amacı, sağlıksız uç noktaların yanı sıra Event Grid sistemini de koruyasağlamaktır.The functional purpose of delayed delivery is to protect unhealthy endpoints as well as the Event Grid system. Arka arkaya ve sağlıklı uç noktalara teslim olmadan, Event Grid yeniden deneme ilkesi ve birim özellikleri bir sistemi kolayca açabilir.Without back-off and delay of delivery to unhealthy endpoints, Event Grid's retry policy and volume capabilities can easily overwhelm a system.

Atılacak mektup olaylarıDead-letter events

Event Grid bir olay suntırabilmediği zaman, teslim edilmemiş olayı bir depolama hesabına gönderebilir.When Event Grid can't deliver an event, it can send the undelivered event to a storage account. Bu işlem, atılacak olarak bilinir.This process is known as dead-lettering. Event Grid, varsayılan olarak, atılacak bir duruma getirin.By default, Event Grid doesn't turn on dead-lettering. Bunu etkinleştirmek için, olay aboneliğini oluştururken teslim edilmemiş olayları barındıracak bir depolama hesabı belirtmeniz gerekir.To enable it, you must specify a storage account to hold undelivered events when creating the event subscription. Teslimleri çözümlemek için bu depolama hesabından olay çekebilirsiniz.You pull events from this storage account to resolve deliveries.

Event Grid, tüm yeniden deneme girişimlerini denediği zaman atılacak harf konumuna bir olay gönderir.Event Grid sends an event to the dead-letter location when it has tried all of its retry attempts. Event Grid bir 400 (Hatalı Istek) veya 413 (varlık çok büyük Istek) yanıt kodu alırsa, olayı hemen atılacak ileti uç noktasına gönderir.If Event Grid receives a 400 (Bad Request) or 413 (Request Entity Too Large) response code, it immediately sends the event to the dead-letter endpoint. Bu yanıt kodları olayın teslimini belirtir hiçbir şekilde başarısız olur.These response codes indicate delivery of the event will never succeed.

Son bir olay teslim girişimi ve atılacak ileti konumuna teslim edildiğinde oluşan beş dakikalık bir gecikme vardır.There is a five-minute delay between the last attempt to deliver an event and when it is delivered to the dead-letter location. Bu gecikme, BLOB depolama işlemlerinin sayısını azaltmaya yöneliktir.This delay is intended to reduce the number Blob storage operations. Atılacak ileti konumu dört saat kullanılamaz durumdaysa, olay bırakılır.If the dead-letter location is unavailable for four hours, the event is dropped.

Atılacak mektup konumunu ayarlamadan önce, kapsayıcısı olan bir depolama hesabınız olmalıdır.Before setting the dead-letter location, you must have a storage account with a container. Olay aboneliği oluştururken bu kapsayıcı için uç noktayı sağlarsınız.You provide the endpoint for this container when creating the event subscription. Uç nokta şu biçimdedir: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>The endpoint is in the format of: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>

Atılacak mektup konumuna bir olay gönderildiğinde bildirim almak isteyebilirsiniz.You might want to be notified when an event has been sent to the dead letter location. Teslim edilmemiş olaylara yanıt vermek için Event Grid kullanmak için, atılacak ileti blobu depolaması için bir olay aboneliği oluşturun .To use Event Grid to respond to undelivered events, create an event subscription for the dead-letter blob storage. Atılacak ileti BLOB depolama alanı teslim edilmemiş bir olay aldığında Event Grid işleyicisine bildirir.Every time your dead-letter blob storage receives an undelivered event, Event Grid notifies your handler. İşleyici, teslim edilmemiş olayları uzlaştırmak için almak istediğiniz eylemlerle yanıt verir.The handler responds with actions you wish to take for reconciling undelivered events.

Geçersiz bir harf konumu ayarlamaya ilişkin bir örnek için, bkz. atılacak mektup ve yeniden deneme ilkeleri.For an example of setting up a dead letter location, see Dead letter and retry policies.

İleti teslimi durumuMessage delivery status

Event Grid, olayların alındığını bildirmek için HTTP yanıt kodlarını kullanır.Event Grid uses HTTP response codes to acknowledge receipt of events.

Başarı kodlarıSuccess codes

Event Grid, yalnızca aşağıdaki http yanıt kodlarını başarılı teslimatlar olarak değerlendirir.Event Grid considers only the following HTTP response codes as successful deliveries. Diğer tüm durum kodları başarısız teslimler olarak değerlendirilir ve uygun şekilde yeniden denenecek veya devredilecek.All other status codes are considered failed deliveries and will be retried or deadlettered as appropriate. Başarılı bir durum kodu aldıktan sonra, teslimi tamamlandı olarak kabul eder Event Grid.Upon receiving a successful status code, Event Grid considers delivery complete.

  • 200 TAMAM200 OK
  • 201 oluşturuldu201 Created
  • 202 kabul edildi202 Accepted
  • 203 yetkili olmayan bilgiler203 Non-Authoritative Information
  • 204 Içerik yok204 No Content

Hata kodlarıFailure codes

Yukarıdaki küme içinde olmayan diğer tüm kodlar (200-204) başarısızlık olarak kabul edilir ve yeniden denenecek.All other codes not in the above set (200-204) are considered failures and will be retried. Bazıları aşağıda özetlenen özel yeniden deneme ilkelerine sahiptir ve tüm diğerleri standart üstel geri ödeme modelini izler.Some have specific retry policies tied to them outlined below, all others follow the standard exponential back-off model. Event Grid mimarisinin mimarisinden kaynaklanan, yeniden deneme davranışının belirleyici olmadığından emin olmak önemlidir.It's important to keep in mind that due to the highly parallelized nature of Event Grid's architecture, the retry behavior is non-deterministic.

Durum koduStatus code Yeniden deneme davranışıRetry behavior
400 Hatalı Istek400 Bad Request 5 dakika veya daha uzun bir süre sonra yeniden dene (sahipsiz ayarla ayarı varsa hemenRetry after 5 minutes or more (Deadletter immediately if deadletter setup)
401 Yetkisiz401 Unauthorized 5 dakika veya daha uzun bir süre sonra yeniden deneyinRetry after 5 minutes or more
403 Yasak403 Forbidden 5 dakika veya daha uzun bir süre sonra yeniden deneyinRetry after 5 minutes or more
404 Bulunamadı404 Not Found 5 dakika veya daha uzun bir süre sonra yeniden deneyinRetry after 5 minutes or more
408 İstek Zaman Aşımı408 Request Timeout 2 dakika veya daha uzun bir süre sonra yeniden deneyinRetry after 2 minutes or more
413 istek varlığı çok büyük413 Request Entity Too Large 10 saniye veya daha kısa bir süre sonra yeniden dene (sahipsiz kurulum yoksa hemenRetry after 10 seconds or more (Deadletter immediately if deadletter setup)
503 Hizmet Kullanılamıyor503 Service Unavailable 30 saniye veya daha uzun bir süre sonra yeniden deneyinRetry after 30 seconds or more
Tüm diğerleriAll others 10 saniye veya daha fazla süre sonra yeniden deneyinRetry after 10 seconds or more

Sonraki adımlarNext steps