C# Academy · Oppitunti

Uudelleenyrityskäytännöt

Yrittäkää hetkellisiä epäonnistumisia uudelleen viiveen avulla.

Oppitunti 1/413 vaihetta

Uudelleenyrityskäytännöt on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.

Mikä Polly on

Polly on .NET:n vikasietoisuuskirjasto, joka auttaa sovelluksia selviytymään tilapäisistä virheistä, hitaista vastauksista ja ylikuormitetuista riippuvuuksista. Se tarjoaa strategioita, kuten uudelleenyrityksen, circuit breakerin, aikakatkaisun, varatoiminnon ja nopeuden rajoittamisen.

Tällä kurssilla käytetään Polly v8:aa (eli Polly.Core-ohjelmointirajapintaa).

dotnet add package Polly.Core

Miksi uudelleen yrittää

Monet virheet ovat tilapäisiä: lyhyt verkkohäiriö, hetkellinen aikakatkaisu tai uudelleenkäynnistyvä palvelu. Toiminnon yrittäminen uudelleen hetkeä myöhemmin onnistuu usein ilman, että käyttäjä edes häiriintyy.

Uudelleenyrityksiä tulee käyttää vain tilapäisiin virheisiin, ei koskaan pysyviin virheisiin, kuten 404-virheeseen.

Yksinkertainen uudelleenyritysstrategia

Polly v8:ssa rakennatte ResiliencePipeline-putken käyttämällä RetryStrategyOptions-asetuksia. Oletusarvoisesti heitetty poikkeus käynnistää uuden yrityksen.

using Polly;
using Polly.Retry;

var pipeline = new ResiliencePipelineBuilder()
    .AddRetry(new RetryStrategyOptions
    {
        MaxRetryAttempts = 3
    })
    .Build();

Suorittaminen putken kautta

Ympäröikää riskialtis kutsu ExecuteAsync-menetelmällä. Polly suorittaa kutsun ja yrittää sitä poikkeuksen sattuessa uudelleen määritetyn määrän kertoja.

await pipeline.ExecuteAsync(async token =>
{
    await httpClient.GetAsync("https://api.example.com/data", token);
});

Uudelleen yritettävien tilanteiden määrittäminen

Käyttäkää ShouldHandle-asetusta predikaatin muodostajan kanssa, jotta uudelleen yritetään vain tiettyjen poikkeusten tai tulosten yhteydessä ja pysyvien virheiden uudelleenyritykset vältetään.

new RetryStrategyOptions<HttpResponseMessage>
{
    ShouldHandle = new PredicateBuilder<HttpResponseMessage>()
        .Handle<HttpRequestException>()
        .HandleResult(r => r.StatusCode == HttpStatusCode.ServiceUnavailable),
    MaxRetryAttempts = 3
};

Vakio- ja eksponentiaalinen viive

Välitön uudelleenyritys voi kuormittaa jo ennestään vaikeuksissa olevaa palvelua. Viive jaksottaa yritykset. Polly tukee vakio-, lineaarista ja eksponentiaalista viivettä BackoffType-asetuksen kautta.

Eksponentiaalinen viive

Eksponentiaalinen viive kaksinkertaistaa viiveen jokaisella yrityskerralla (esimerkiksi 2 s, 4 s, 8 s). Asettakaa BackoffType.Exponential ja määrittäkää perusviive Delay-asetuksella.

new RetryStrategyOptions
{
    MaxRetryAttempts = 4,
    BackoffType = DelayBackoffType.Exponential,
    Delay = TimeSpan.FromSeconds(2)
};

Satunnaisuuden lisääminen

Jos monet asiakkaat yrittävät uudelleen saman aikataulun mukaan, syntyy samanaikaisia kuormituspiikkejä (”ryntäilevän lauman” ilmiö). Satunnaisuus lisää viiveisiin vaihtelua. Ottakaa se käyttöön asetuksella UseJitter = true.

new RetryStrategyOptions
{
    MaxRetryAttempts = 4,
    BackoffType = DelayBackoffType.Exponential,
    Delay = TimeSpan.FromSeconds(1),
    UseJitter = true
};

Reagointi jokaiseen uudelleenyritykseen

OnRetry-takaisinkutsun avulla voitte kirjata yritykset tai tuottaa metriikoita. Se saa parametreina yrityksen numeron ja sen käynnistäneen virheen.

new RetryStrategyOptions
{
    MaxRetryAttempts = 3,
    OnRetry = args =>
    {
        Console.WriteLine($"Retry {args.AttemptNumber} after {args.RetryDelay}");
        return default;
    }
};

Uudelleenyritysten kokonaisajan rajoittaminen

Rajoittamattomat uudelleenyritykset voivat pitää käyttäjää odottamassa liian kauan. Yhdistäkää uudelleenyritykset aikakatkaisustrategiaan (jota käsitellään myöhemmin) tai rajoittakaa yritysten määrää, jotta toiminto epäonnistuu nopeasti, kun palautuminen on epätodennäköistä.

Uudelleenyritykset HttpClientille

HTTP-kutsuja varten rekisteröikää vikasietoisuuskäsittelijä HttpClient-asiakkaalle, jolloin uudelleenyrityksiä käytetään automaattisesti jokaisessa pyynnössä.

builder.Services.AddHttpClient("api")
    .AddResilienceHandler("retry", pipeline =>
    {
        pipeline.AddRetry(new HttpRetryStrategyOptions
        {
            MaxRetryAttempts = 3,
            BackoffType = DelayBackoffType.Exponential
        });
    });

Pikatarkistus

Testatkaa uudelleenyrityksiä koskeva osaamisenne.

Kertaus

Uudelleenyritysstrategiat käsittelevät tilapäisiä virheitä suorittamalla toiminnon uudelleen. Polly v8:ssa rakennatte putken AddRetry-menetelmällä, rajaatte käsiteltävät tilanteet ShouldHandle-asetuksella ja jaksotatte yritykset käyttämällä BackoffType.Exponential-asetusta sekä UseJitter-asetusta. Tarkkailkaa yrityksiä OnRetry-asetuksella ja rekisteröikää vikasietoisuuskäsittelijä suojaamaan jokainen HttpClient-kutsu.

Aloita maksutta

Opi C# tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
93
Oppitunnit
346

Usein kysytyt kysymykset

Onko oppitunti ”Uudelleenyrityskäytännöt” ilmainen?

Kyllä – oppitunnin ”Uudelleenyrityskäytännöt” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Uudelleenyrityskäytännöt”?

Yrittäkää hetkellisiä epäonnistumisia uudelleen viiveen avulla. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Uudelleenyrityskäytännöt”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?

Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Uudelleenyrityskäytännöt
  2. Sulakekatkaisijamalli
  3. Aikakatkaisu- ja varakäytännöt
  4. Vikasietoisuusputket
← Takaisin: C# Academy