Haberler çevrimiçi logosu

Womanne

Member
Bu blog serisinin .NET 8.0'daki önceki bölümü şunları içerir: AddStandardResilienceHandler() sunuldu. Bu gönderi varsayılan ayarları özelleştirmeyle ilgilidir.


Duyuru








Dr. Holger Schwichtenberg, 53 tanınmış uzmanıyla danışmanlık, eğitim ve yazılım geliştirme yoluyla çok sayıda orta ve büyük ölçekli şirketi destekleyen www.IT-Visions.de uzman ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası konferansa katılımı, 90'dan fazla uzmanlık kitabı ve 1.500'den fazla uzmanlık makalesi sayesinde Holger Schwichtenberg, .NET ve web teknolojileri konusunda Almanya'nın en tanınmış uzmanlarından biridir.







alternatif olarak AddStandardResilienceHandler() aracılığıyla yapabilirsin AddResilienceHandler() Polly işlem hattınızı tanımlayın. Şekil 1 standart boru hattını göstermektedir.







Standart yönetici, boru hattı adı verilen bir süreçte beş görevi tamamlar (Şekil 1).


(Resim: Microsoft)



Aşağıdaki kendinden tanımlı işlem hattı, aşağıdaki ayarlarla yalnızca önceki tablodaki 2'den 5'e kadar olan siparişleri kullanır:

  • Toplam istek zaman aşımı: 10 saniye
  • Tekrarla: Arama beş defaya kadar tekrarlanır. Denemeler arasındaki aralık sabit 1 saniyedir. Deneme sırasında ekranda çıktı var.
  • Otomatik geçiş: İsteklerin %50'si 10 saniye içinde başarısız olursa, ancak en erken 5 istekten sonra iptal edilir
  • Deneme zaman aşımı: 2 saniye

services.AddHttpClient<WeatherServiceClient>(
// Timeout insgesamt: Hier 10 Sekunden
client => { client.Timeout = new TimeSpan(0,0,10); })
.AddResilienceHandler(
"CustomPipeline",
static builder =>
{
// Wiederholungen bei Fehlern
// Hier: Der Aufruf wird bis zu fünf Mal wiederholt. Der Abstand zwischen den Versuchen ist konstant 1 Sekunde. Bei dem Versuch gibt es eine Bildschirmausgabe.
// https://www.pollydocs.org/strategies/retry.html
builder.AddRetry(new HttpRetryStrategyOptions
{
// Customize and configure the retry logic.
BackoffType = DelayBackoffType.Constant, // oder Linear oder Exponential
Delay = TimeSpan.FromSeconds(1),
MaxRetryAttempts = 10,

OnRetry = static (args) =>
{
CUI.Cyan($"{DateTime.Now.ToLongTimeString()} Versuch #{args.AttemptNumber} Zeit seit letztem Versuch:{(int)(DateTime.Now - lastTry).TotalMilliseconds} ms Dauer:{args.Duration} Grund:{args.Outcome.Result} n");
lastTry = DateTime.Now;
return ValueTask.CompletedTask;
},
});

// Trennschalter, wenn zu viele Fehler passieren
// Hier: Abbruch wenn in 10 Sekunden 50% der Anfragen fehlschlagen, frühestens aber nach 5 Anfragen
// https://www.pollydocs.org/strategies/circuit-breaker.html
builder.AddCircuitBreaker(new HttpCircuitBreakerStrategyOptions
{
// Customize and configure the circuit breaker logic.
SamplingDuration = TimeSpan.FromSeconds(10),
FailureRatio = 0.5,
MinimumThroughput = 5,
ShouldHandle = static args =>
{
return ValueTask.FromResult(args is
{
Outcome.Result.StatusCode: HttpStatusCode.RequestTimeout or HttpStatusCode.TooManyRequests or HttpStatusCode.InternalServerError
});
}
});

// Timeout für einzelne Versuche
// hier: 2 Sekunden
// https://www.pollydocs.org/strategies/timeout.html
builder.AddTimeout(TimeSpan.FromSeconds(2));
});




(kendim)
 
Üst