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
// 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
}
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 ๐ง .
Publish to Nuget.- Adding more events to easily integrate with any analytics platform
- Added some container support