.NET 8.0 için bu blog dizisinin önceki baskısı AddStandardResilienceHandler() Sunuldu. Bu makale varsayılan ayarların uyarlanması ile ilgilidir.
Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.
Alternatif olarak AddStandardResilienceHandler() Yapabilirsiniz AddResilienceHandler() Tamamen uygun bir boru hattı Polly tanımlayın. Şekil 1, standart boru hattını göstermektedir.
Standart adam, sözde bir boru hattında beş aktivite gerçekleştirir (Şekil 1).
(Resim: Microsoft)
Aşağıdaki Auto -Definita Boru Hattı, aşağıdaki tablodan aşağıdaki ayarlarla yalnızca 2 ila 5 arasındaki siparişleri kullanır:
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));
});
(RME)

Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.
Alternatif olarak AddStandardResilienceHandler() Yapabilirsiniz AddResilienceHandler() Tamamen uygun bir boru hattı Polly tanımlayın. Şekil 1, standart boru hattını göstermektedir.

Standart adam, sözde bir boru hattında beş aktivite gerçekleştirir (Şekil 1).
(Resim: Microsoft)
Aşağıdaki Auto -Definita Boru Hattı, aşağıdaki tablodan aşağıdaki ayarlarla yalnızca 2 ila 5 arasındaki siparişleri kullanır:
- Sevgili Gereksinim Süresi: 10 saniye
- Tekrar: Çağrı beş kata kadar tekrarlanır. Testler arasındaki mesafe 1 saniyedir. Test sırasında ekranın bir çıkışı var.
- Ayrı Anahtar: İsteklerin % 50'si 10 saniyede başarısız olursa yıkım, ancak 5 soruşturmadan sonra mümkün olan en kısa sürede
- Test-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));
});
(RME)