pcsajtai - Trybot 2.4.3-preview-133

Trybot is a transient fault handling framework including such bots as Retry, Timeout, Fallback and Circuit Breaker.

PM> Install-Package Trybot -Version 2.4.3-preview-133 -Source https://www.myget.org/F/pcsajtai/api/v3/index.json

Copy to clipboard

> nuget.exe install Trybot -Version 2.4.3-preview-133 -Source https://www.myget.org/F/pcsajtai/api/v3/index.json

Copy to clipboard

> dotnet add package Trybot --version 2.4.3-preview-133 --source https://www.myget.org/F/pcsajtai/api/v3/index.json

Copy to clipboard
<PackageReference Include="Trybot" Version="2.4.3-preview-133" />
Copy to clipboard
source https://www.myget.org/F/pcsajtai/api/v3/index.json

nuget Trybot  ~> 2.4.3-preview-133
Copy to clipboard

> choco install Trybot --version 2.4.3-preview-133 --source https://www.myget.org/F/pcsajtai/api/v2

Copy to clipboard
Import-Module PowerShellGet
Register-PSRepository -Name "pcsajtai" -SourceLocation "https://www.myget.org/F/pcsajtai/api/v2"
Install-Module -Name "Trybot" -RequiredVersion "2.4.3-preview-133" -Repository "pcsajtai" -AllowPreRelease
Copy to clipboard

Browse the sources in this package using Visual Studio or WinDbg by configuring the following legacy symbol server URL: https://www.myget.org/F/pcsajtai/symbols/


Trybot

Appveyor build status Travis CI build status Tests coverage Sourcelink

Trybot is a transient fault handling framework including such resiliency solutions as Retry, Timeout, Fallback, Rate limit, and Circuit Breaker. The framework is extendable with custom, user-defined bots.

Github (stable) NuGet (stable) Fuget (stable) NuGet (pre-release)
Github release NuGet Version Trybot on fuget.org Nuget pre-release

Bots

  • Retry - Allows configuring auto re-execution of an operation based on exceptions it throws or on its return value.

  • Timeout - Ensures that the caller won't have to wait indefinitely for an operation to finish by setting a maximum time range within the given operation should be executed.

  • Fallback - Handles faults by executing an alternative operation when the original one is failing, also provides the ability to produce an alternative result value when the actual operation is not able to do it.

  • Circuit breaker - When the number of failures exceeds a given threshold, this bot prevents the continuous re-execution of the failing operation by blocking the traffic for a configured amount of time. This usually could give some break to the remote resource to heal itself properly.

  • Rate limit - Controls the rate of the operations by specifying a maximum amount of executions within a given time window.

Supported Platforms

  • .NET 4.5 and above
  • .NET Core
  • Mono
  • Universal Windows Platform
  • Xamarin (Android/iOS/Mac)
  • Unity

Usage

During the configuration of a bot policy, you can chain different bots to each other.

policy.Configure(policyConfig => policyConfig
    .CircuitBreaker(circuitBreakerConfig => circuitBreakerConfig
        .DurationOfOpen(TimeSpan.FromSeconds(10))
        .BrakeWhenExceptionOccurs(exception => exception is HttpRequestException),
            strategyConfig => strategyConfig
                .FailureThresholdBeforeOpen(5)
                .SuccessThresholdInHalfOpen(2))

    .Retry(retryConfig => retryConfig
        .WithMaxAttemptCount(5)
        .WhenExceptionOccurs(exception => exception is HttpRequestException)
        .WaitBetweenAttempts((attempt, exception) => 
        {
            if(exception is CircuitOpenException cbException)
                return TimeSpan.FromSeconds(cbException.OpenDuration);

            return TimeSpan.FromSeconds(Math.Pow(2, attempt);
        })))

    .Timeout(timeoutConfig => timeoutConfig
        .After(TimeSpan.FromSeconds(120))));

The handling order of the given operation would be the same as the configuration order from top to bottom. That means in the example above that the circuit breaker will try to execute the given operation first, then if it fails, the retry bot will start to re-execute it until the timeout bot is not signaling a cancellation.

Then you can execute the configured policy:

  • With cancellation:

    var tokenSource = new CancellationTokenSource();
    policy.Execute((context, cancellationToken) => DoSomeCancellableOperation(cancellationToken), tokenSource.Token);
    
  • With a custom correlation id:

    var correlationId = Guid.NewGuid();
    policy.Execute((context, cancellationToken) => DoSomeOperationWithCorrelationId(context.CorrelationId), correlationId);
    

    Without setting a custom correlation id, the framework will always generate a unique one for every policy execution.

  • Synchronously:

    // Without lambda parameters
    policy.Execute(() => DoSomeOperation());
    
    // Or with lambda parameters
    policy.Execute((context, cancellationToken) => DoSomeOperation());
    
  • Asynchronously:

    // Without lambda parameters
    await policy.ExecuteAsync(() => DoSomeAsyncOperation());
    
    // Or with lambda parameters
    await policy.ExecuteAsync((context, cancellationToken) => DoSomeAsyncOperation());
    

You can also create your custom bots as described here.

Contact & Support

  • Join the chat at https://gitter.im/z4kn4fein/trybot
  • Create an issue for bug reports, feature requests, or questions.
  • Add a ⭐️ to support the project!

Extensions

Documentation

  • feature: #2 Feature Request: OnRetrySuccess
  • feature: #3 Feature Request: OnRetryLimitReached
  • .NETFramework 4.5
  • Portable Class Library (.NETFramework 4.5, Windows 8.0, WindowsPhone 8.0, WindowsPhoneApp 8.1)
  • .NETStandard 1.0
    • NETStandard.Library (>= 1.6.1)
  • .NETStandard 2.0
  • .NETFramework 4.5: 4.5.0.0
  • Portable Class Library (.NETFramework 4.5, Windows 8.0, WindowsPhone 8.0, WindowsPhoneApp 8.1): Profile259: 0.0.0.0
  • .NETStandard 1.0: 1.0.0.0
  • .NETStandard 2.0: 2.0.0.0

                        
Assembly Assembly hash Match
/lib/netstandard1.0/trybot.dll 39313f1407034a33bdee591c53c4f006FFFFFFFF
/lib/netstandard2.0/trybot.dll 3cba6cd1af0b4935ab66520df8e7bd72FFFFFFFF
/lib/portable-net45+win8+wp8+wpa81/trybot.dll 8c73a6d634b14dcda87dbc335654eaf1FFFFFFFF
/lib/net45/trybot.dll da5d852f9fed4e9986ac2440824602a6FFFFFFFF

Owners

Authors

Peter Csajtai

Project URL

https://github.com/z4kn4fein/trybot

License

MIT

Tags

Trybot retry timeout fallback circuitbreaker

Info

0 total downloads
0 downloads for version 2.4.3-preview-133
Download (206.73 KB)
Download legacy symbols (206.72 KB)
Found on the current feed only

Package history

Version Size Last updated Downloads Mirrored?
2.4.3-preview-133 206.73 KB Thu, 09 Jul 2020 14:29:10 GMT 0