Skip to content

lrAlval/Breaker

Repository files navigation

Breaker

Build status

Build Status NuGet version coverage

Overview

Breaker is an implementation of the Circuit Breaker pattern for .NET with zero dependencies.

This pattern can help you monitor the performance of a remote resource and improve the stability and resilience of your application by isolating the communication with third-party services, so that your application won't be affected by their fails.

You can read more about Martin Fowler and on MSDN

Example Usage

// Initialize the circuit breaker
var settings = new CircuitBreakerConfig
{
    ResetTimeOut = TimeSpan.FromMilliseconds(40),
    InvocationTimeOut = TimeSpan.FromMilliseconds(250),
    FailuresThreshold = 2,
    SuccessThreshold = 1,
    TaskScheduler = TaskScheduler.Default
};
var circuitBreaker = new CircuitBreaker(settings);

try
{
    // perform a potentially fragile call through the circuit breaker
    circuitBreaker.ExecuteAsync(() => _fragileService.CallAsync);
}
catch (CircuitBreakerTimeoutException)
{
    // timeout exception, trackevent
}
catch (CircuitBreakerOpenException)
{
    // the service is unavailable, failover here
}
catch (Exception)
{
    // handle other unexpected exceptions
}

Why?

There are not so many of them. I didn't find any that would suit me, since I need to specify a separated TaskScheduler for the third-party service calls. Polly seems the most mature from all of them but it has a locking nature and it doesn't provide a way to specify a separate TaskScheduler to execute actions. The code provided on MSDN isn't production ready and just a piece of code. And so on so forth. So that the yet another library was born 🚧 .

Roadmap

  • Publish to Nuget.
  • Adding more events to easily integrate with any analytics platform
  • Added some container support