Hata İşleme ve Yeniden Denemeler
Hataları yeniden denemeler ve ölü harf kuyruklarıyla işleyin.
Hata İşleme ve Yeniden Denemeler, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Hatalar Normaldir
Tüketiciler başarısız olabilir: geçici bir veritabanı hatası, alt sistem zaman aşımı veya hatalı verilerle ilgili bir hata meydana gelebilir. MassTransit, iletilerin kaybolması yerine hataların düzgünce ele alınması için katmanlı araçlar (yeniden deneme, yeniden teslim ve hata kuyrukları) sunar.
Anında Yeniden Deneme
Kısa süreli aksaklıklarda yeniden denemeyi yapılandırın; böylece MassTransit vazgeçmeden önce iletiyi hızlı aralıklarla birkaç kez yeniden işler.
cfg.ReceiveEndpoint("orders", e =>
{
e.UseMessageRetry(r => r.Immediate(3));
e.ConfigureConsumer<OrderConsumer>(context);
});Aralıklı ve Üstel Yeniden Deneme
Yeniden denemeler arasına süre koymak, toparlanmanın daha uzun sürdüğü durumlarda yardımcı olur. Polly'dekine benzer şekilde aralıklar veya üstel bekleme kullanın.
e.UseMessageRetry(r =>
r.Exponential(5,
minInterval: TimeSpan.FromSeconds(1),
maxInterval: TimeSpan.FromMinutes(1),
intervalDelta: TimeSpan.FromSeconds(2)));Hangi Hataların Yeniden Deneneceğini Filtreleme
Yalnızca geçici özel durumları yeniden deneyin; doğrulama başarısızlıkları gibi kalıcı durumlarda yeniden denemeyin. Yeniden denemelerin kapsamını belirlemek için Handle ve Ignore kullanın.
e.UseMessageRetry(r =>
{
r.Handle<TimeoutException>();
r.Ignore<ValidationException>();
r.Immediate(3);
});Yeniden Deneme ve Yeniden Teslim Karşılaştırması
Yeniden deneme, iletiyi bellekte tutar ve hızlıca yeniden işler. Yeniden teslim (gecikmeli veya ikinci düzey yeniden deneme), iletiyi çok daha sonra yeniden teslim edilmek üzere ileti aracısına geri gönderir ve bu sırada tüketiciyi serbest bırakır.
e.UseDelayedRedelivery(r =>
r.Intervals(TimeSpan.FromMinutes(5),
TimeSpan.FromMinutes(15),
TimeSpan.FromMinutes(30)));Her İki Katmanı Birleştirme
Sağlam bir kurulum, kısa süreli aksaklıklar için anında yeniden denemeyi, daha uzun kesintiler içinse gecikmeli yeniden teslimi kullanır. Yeniden teslimi yeniden denemenin dışında yapılandırın; böylece her yeniden teslim denemesi kendi anında yeniden denemelerini de alır.
e.UseDelayedRedelivery(r => r.Intervals(
TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(15)));
e.UseMessageRetry(r => r.Immediate(3));Hata Kuyruğu
Tüm yeniden denemeler ve yeniden teslimler tükendiğinde MassTransit, iletiyi bir hata kuyruğuna (<queue>_error olarak adlandırılır) taşır. İleti, araştırma için özel durum ayrıntılarıyla birlikte korunur ve hiçbir zaman sessizce atılmaz.
Arızalar
MassTransit, başarısızlık durumunda ayrıca bir Fault<T> olayı yayınlar. Diğer hizmetler uyarı vermek, kayıt tutmak veya telafiyi başlatmak için arıza olaylarını tüketebilir.
public class OrderFaultConsumer : IConsumer<Fault<OrderPlaced>>
{
public Task Consume(ConsumeContext<Fault<OrderPlaced>> context)
{
// inspect context.Message.Exceptions
return Task.CompletedTask;
}
}Yinelenen İşlemlerde Tutarlılık Önemlidir
Yeniden deneme ve yeniden teslim, bir iletiyi birden fazla kez işleyebileceğinden tüketiciler, aynı ileti tekrar işlendiğinde sonucu değiştirmeyecek şekilde tasarlanmalıdır: aynı iletiyi iki kez işlemek iki kez ücret almaya veya yinelenen iş yapmaya yol açmamalıdır. Benzersiz kimlikler ve yineleme denetimleri kullanın.
Hata Kuyruğundan Yeniden Oynatma
Bir hatayı düzelttikten sonra iletileri hata kuyruğundan özgün kuyruğa geri taşıyarak yeniden işleyebilir ve daha önce başarısız olan işi kurtarabilirsiniz.
Ölü İleti ve Atlanan Kuyruklar
MassTransit, hiçbir tüketicinin istemediği iletiler için atlanan kuyruğu (_skipped) da kullanır. Bu, üretimde yanlış yönlendirilmiş veya beklenmeyen ileti türlerini fark etmenize yardımcı olur.
Hızlı Kontrol
Hata işleme ve yeniden denemeleri sınayın.
Özet
MassTransit, hata işleme katmanlarını bir arada kullanır: aksaklıklar için yeniden deneme (anında/üstel, Handle/Ignore ile kapsamı sınırlandırılmış), daha uzun kesintiler için yeniden teslim ve yeniden denemeleri tükenen iletiler için bir hata kuyruğu; ayrıca uyarı vermek için Fault<T> olayları kullanılır. İletiler birden fazla kez işlenebileceğinden tüketicileri aynı ileti tekrarlandığında etkilenmeyecek şekilde tasarlayın ve hataları düzelttikten sonra hata kuyruğundan yeniden oynatın.
Sıkça Sorulan Sorular
“Hata İşleme ve Yeniden Denemeler” dersi ücretsiz mi?
Evet — “Hata İşleme ve Yeniden Denemeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Hata İşleme ve Yeniden Denemeler” dersinde ne öğreneceğim?
Hataları yeniden denemeler ve ölü harf kuyruklarıyla işleyin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Hata İşleme ve Yeniden Denemeler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Mesajlaşma Kavramları
- Mesaj Üretme ve Tüketme
- Saga'lar ve İş Akışları
- Hata İşleme ve Yeniden Denemeler