Polly

czyli Andrzeju nie denerwuj się!

Na początku świata...

...był chaos.

A na początku IT...

...był porządek

A zamieniliśmy go w to

Dawno, dawno temu...

19 stycznia

Wrocław

Seria Ostrej Architektury

Sponsorzy

My

widziani oczami eJaJ 🤦‍♂️

Devin is a lie

Dev Andrzej

Rider

2 tygodnie

3 miesiące później

Nie czy ale kiedy...

Polly

polly, polly, polly, ...

Two options

  • reactive
  • proactive

reactive

  • retry
  • circuit breaker
  • fallback
  • hedging

proactive

  • timeout
  • rate limiter

Szczypta chaosu

🦜

🏴‍☠️

Polly

Simmy

Simmy

arrrrrrrrrrrrrrr

Chaos

  • Exception
  • Result
  • Latency
  • Behavior

is it complex?

var retryStrategyOptions = new RetryStrategyOptions
{
    ShouldHandle = (_) =>                    ValueTask.FromResult<bool>(true),
};

var pipeline = new ResiliencePipelineBuilder()
    .AddRetry(retryStrategyOptions)
    .Build();

is it complex?

bool success = false;


pipeline.Execute(async () =>
{
    WriteLine($"Fetching {DateTime.Now}");
    var c = new HttpClient();
    var r = await c.GetAsync("http://ooops.pl");
    success = r.IsSuccessStatusCode;
});

is it complex?

Hello, World!
Trying to fetch data from network 26.04.2024 00:19:13
Trying to fetch data from network 26.04.2024 00:19:15
Trying to fetch data from network 26.04.2024 00:19:17
Trying to fetch data from network 26.04.2024 00:19:19
Success: False

 

is it complex?

is it complex?

var o = new RetryStrategyOptions
{
    ShouldHandle = (_) => ValueTask.FromResult<bool>(true),
};

is it complex?

var pipeline = new ResiliencePipelineBuilder()
 .AddCircuitBreaker(o)
    .Build();

is it complex?

while (true)
pipeline.Execute(async () =>
{
    Console.WriteLine($"Fetching {DateTime.Now}");
    var c = new HttpClient();
    var r = await c.GetAsync("http://ooops");
    success = response.IsSuccessStatusCode;
});

is it complex?

Trying to fetch data from network 26.04.2024 00:16:37
... 100 times later
Trying to fetch data from network 26.04.2024 00:16:37

Unhandled exception. Polly.CircuitBreaker.BrokenCircuitException: The circuit is now open and is not allowing calls.
   at Polly.Outcome`1.GetResultOrRethrow()
   at Polly.ResiliencePipeline.Execute[TResult](Func`1 callback)
   at Program.<Main>$(String[] args) in Program.cs:line 25

 

Na koniec

- Jarek & Paweł

- OstraPiła podcast - 97 odc

- Ostra Uczy > 50 live'ów

Więcej info*?

* - wersji v7

Links

  • https://www.pollydocs.org

Dzięki za uwagę

Like & subscribe

@ostrapila

@j_stadnicki

@pawel_lukasik

Polly & Simmy czyli

By Pawel Lukasik

Polly & Simmy czyli

  • 54