Polly Retry Policy'sini Yanlış Yere Koyunca
HttpClient'ın etrafındaki iyimserlik fırtınası

Ödeme servisi 503 verdi, kullanıcı 'tekrar dene'ye basmadı; bizim policy bastı. Beş kez. İlk çağrı aslında geçmişti, yanıt zaman aşımına düşmüştü. Kartı iki kez çekmedik çünkü karşı taraf idempotency key bekliyordu — beklemeyen bir iç serviste bu henüz yoktu.
Nereye konur
Retry, geçici ve güvenli tekrarlanabilir çağrıda durur. GET, idempotent PUT, kuyruk publish. POST /orders retry'si, ancak body'de Idempotency-Key varsa ve karşı taraf onu onurlandırıyorsa.
builder.Services.AddHttpClient(c =>
{
c.BaseAddress = new Uri(builder.Configuration["Inventory:BaseUrl"]!);
c.Timeout = TimeSpan.FromSeconds(5);
})
.AddTransientHttpErrorPolicy(p =>
p.WaitAndRetryAsync(3, attempt => TimeSpan.FromMilliseconds(80 * Math.Pow(2, attempt))));
Policy HttpClient'da. Kullanıcı isteğini saran bir global middleware değil. Timeout, retry bütçesinden küçük olmamalı; aksi halde retry'lar timeout'a yetişemez, hepsi iptal olur.
Circuit breaker'ı aynı pipeline'a eklemek, hasta servisi dövmemek içindir. Retry her 503'ü çağırırsa breaker hiç açılmaz gibi görünür; aslında çağrı sayısı artar. İkisini birlikte düşünün: kısa retry, sonra açık devre, sonra yarım açık deneme.
Yorumlar
Yorumlar (0)
Yorumlar üyelere açık. Üye ol · Giriş yap