Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ExponentialBackoff ¶
type ExponentialBackoff struct { // MaxRetries is the amount of retry which is allowed before giving up the application. // // Default: 5 MaxRetries int // BackoffDuration is the time duration which will be used to calculate the exponential backoff wait time. // // Default: 1/2 time.Second BackoffDuration time.Duration }
ExponentialBackoff will answer if retry can be made. It waits as well the amount of time based on the failure count. The waiting time before returning is doubled for each failed attempts This ensures that the system gets progressively more time to recover from any issues.
Example ¶
package main import ( "context" "github.com/adamluzsi/frameless/pkg/retry" ) func main() { ctx := context.Background() rs := retry.ExponentialBackoff{} for i := 0; rs.ShouldTry(ctx, i); i++ { // do an action // return on success } // return failure }
Output:
type Jitter ¶
type Jitter struct { // MaxRetries is the amount of retry which is allowed before giving up the application. // // Default: 5 MaxRetries int // MaxWaitDuration is the time duration which will be used to calculate the exponential backoff wait time. // // Default: 5 * time.Second MaxWaitDuration time.Duration }
Jitter is a random variation added to the backoff time. This helps to distribute the retry attempts evenly over time, reducing the risk of overwhelming the system and avoiding synchronization between multiple clients that might be retrying simultaneously.
Example ¶
package main import ( "context" "github.com/adamluzsi/frameless/pkg/retry" ) func main() { ctx := context.Background() rs := retry.Jitter{} for i := 0; rs.ShouldTry(ctx, i); i++ { // do an action // return on success } // return failure }
Output:
Click to show internal directories.
Click to hide internal directories.