C# Academy · Lektion

Circuit breaker-mönstret

Sluta tillfälligt anropa tjänster som fallerar.

Lektion 2 av 413 steg

Circuit breaker-mönstret är en gratis lektion i C# Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C# Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C# Academy innehåller totalt 4 lektioner.

Problemet som återförsök inte kan lösa

Om ett beroende verkligen ligger nere leder återförsök vid varje begäran bara till mer belastning och gör den egna appen långsammare. Mönstret kretsbrytare upptäcker ihållande fel och slutar anropa den felande tjänsten under en viss tid.

En idé från elektronik

Precis som en elektrisk brytare som löser ut för att skydda en krets öppnas kretsbrytaren efter för många fel och testar sedan automatiskt om beroendet har återhämtat sig.

De tre tillstånden

En kretsbrytare har tre tillstånd: Stängd, där anrop passerar normalt, Öppen, där anrop blockeras omedelbart, och Halvöppen, där ett testanrop kontrollerar om systemet har återhämtat sig.

Tillståndet Stängd

I tillståndet Stängd passerar begäranden igenom och Polly håller reda på felfrekvensen. Om antalet fel överskrider tröskelvärdet under mätintervallet övergår kretsbrytaren till tillståndet Öppen.

Tillståndet Öppen

I tillståndet Öppen kortsluter Polly anropen: det kastar omedelbart ett BrokenCircuitException utan att anropa beroendet. Det ger beroendet tid att återhämta sig och gör att anropen misslyckas snabbt.

try
{
    await pipeline.ExecuteAsync(token => CallServiceAsync(token));
}
catch (BrokenCircuitException)
{
    // circuit is open, fail fast
}

Tillståndet Halvöppen

När brytningstiden har löpt ut övergår kretsbrytaren till Halvöppen och tillåter en testbegäran. Vid framgång stängs kretsen; vid fel öppnas den igen under ytterligare en brytningsperiod.

Konfigurera kretsbrytaren

Polly v8 använder CircuitBreakerStrategyOptions. Viktiga inställningar är FailureRatio, till exempel 0.5 = 50 %, MinimumThroughput, SamplingDuration och BreakDuration.

using Polly.CircuitBreaker;

var pipeline = new ResiliencePipelineBuilder()
    .AddCircuitBreaker(new CircuitBreakerStrategyOptions
    {
        FailureRatio = 0.5,
        MinimumThroughput = 10,
        SamplingDuration = TimeSpan.FromSeconds(30),
        BreakDuration = TimeSpan.FromSeconds(15)
    })
    .Build();

FailureRatio och MinimumThroughput

FailureRatio är andelen fel som får kretsbrytaren att lösa ut. MinimumThroughput säkerställer att kretsbrytaren endast löser ut efter tillräckligt många anrop, så att ett tidigt fel inte öppnar den i förtid.

Reagera på tillståndsändringar

Använd återanropsfunktionerna OnOpened, OnClosed och OnHalfOpened för att logga övergångar eller skicka varningar när ett beroende försämras.

new CircuitBreakerStrategyOptions
{
    FailureRatio = 0.5,
    OnOpened = args =>
    {
        Console.WriteLine($"Circuit opened for {args.BreakDuration}");
        return default;
    }
};

Kombinera med återförsök

Återförsök och kretsbrytare kompletterar varandra: återförsök hanterar kortvariga problem, medan kretsbrytaren slutar försöka igen när felen blir ihållande. Ordningen spelar roll, vilket vi återkommer till i lektionen om pipelines.

Manuell styrning

Ni kan hålla i ett CircuitBreakerManualControl för att isolera kretsbrytaren, tvinga den att öppnas eller stänga den manuellt. Det är användbart under underhållsperioder.

var manualControl = new CircuitBreakerManualControl();
await manualControl.IsolateAsync(); // force open
await manualControl.CloseAsync();   // force closed

Snabbkontroll

Testa mönstret kretsbrytare.

Sammanfattning

Kretsbrytaren skyddar överbelastade beroenden genom att växla mellan tillstånden Stängd, Öppen och Halvöppen. I Polly v8 styr AddCircuitBreaker tillsammans med FailureRatio, MinimumThroughput, SamplingDuration och BreakDuration när kretsen ska öppnas. I tillståndet Öppen kastas BrokenCircuitException så att anrop misslyckas snabbt, och återanropsfunktioner samt manuell styrning gör att Ni kan observera och åsidosätta tillståndet.

Gratis att börja

Lär dig C# med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
93
Lektioner
346

Vanliga frågor

Är lektionen ”Circuit breaker-mönstret” gratis?

Ja – hela texten till ”Circuit breaker-mönstret” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C# Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C# Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Circuit breaker-mönstret”?

Sluta tillfälligt anropa tjänster som fallerar. Ni övar på C# Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig C# Academy?

Du behöver inga förkunskaper. Utbildningen i C# Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Circuit breaker-mönstret”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här C# Academy-lektionen?

Ja. Varje C# Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Återförsökspolicyer
  2. Circuit breaker-mönstret
  3. Timeout- och fallback-policyer
  4. Resilienspipelines
← Tillbaka till C# Academy