retry

package
v3.0.0-...-2834d1d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 19, 2024 License: MIT Imports: 3 Imported by: 0

README

Retry Addon

Retry addon for Fiber designed to apply retry mechanism for unsuccessful network operations. This addon uses exponential backoff algorithm with jitter. It calls the function multiple times and tries to make it successful. If all calls are failed, then, it returns error. It adds a jitter at each retry step because adding a jitter is a way to break synchronization across the client and avoid collision.

Table of Contents

Signatures

func NewExponentialBackoff(config ...Config) *ExponentialBackoff

Examples

Firstly, import the addon from Fiber,

import (
    "github.com/boomhut/fiber/v3/addon/retry"
)

Default Config

retry.NewExponentialBackoff()

Custom Config

retry.NewExponentialBackoff(retry.Config{
        InitialInterval: 2 * time.Second,
        MaxBackoffTime:  64 * time.Second,
        Multiplier:      2.0,
        MaxRetryCount:   15,
})

Config

// Config defines the config for addon.
type Config struct {
    // InitialInterval defines the initial time interval for backoff algorithm.
    //
    // Optional. Default: 1 * time.Second
    InitialInterval time.Duration
    
    // MaxBackoffTime defines maximum time duration for backoff algorithm. When
    // the algorithm is reached this time, rest of the retries will be maximum
    // 32 seconds.
    //
    // Optional. Default: 32 * time.Second
    MaxBackoffTime time.Duration
    
    // Multiplier defines multiplier number of the backoff algorithm.
    //
    // Optional. Default: 2.0
    Multiplier float64
    
    // MaxRetryCount defines maximum retry count for the backoff algorithm.
    //
    // Optional. Default: 10
    MaxRetryCount int
    
    // currentInterval tracks the current waiting time.
    //
    // Optional. Default: 1 * time.Second
    currentInterval time.Duration
}

Default Config Example

// DefaultConfig is the default config for retry.
var DefaultConfig = Config{
	InitialInterval: 1 * time.Second,
	MaxBackoffTime:  32 * time.Second,
	Multiplier:      2.0,
	MaxRetryCount:   10,
	currentInterval: 1 * time.Second,
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DefaultConfig = Config{
	InitialInterval: 1 * time.Second,
	MaxBackoffTime:  32 * time.Second,
	Multiplier:      2.0,
	MaxRetryCount:   10,
	// contains filtered or unexported fields
}

DefaultConfig is the default config for retry.

Functions

This section is empty.

Types

type Config

type Config struct {
	// InitialInterval defines the initial time interval for backoff algorithm.
	//
	// Optional. Default: 1 * time.Second
	InitialInterval time.Duration

	// MaxBackoffTime defines maximum time duration for backoff algorithm. When
	// the algorithm is reached this time, rest of the retries will be maximum
	// 32 seconds.
	//
	// Optional. Default: 32 * time.Second
	MaxBackoffTime time.Duration

	// Multiplier defines multiplier number of the backoff algorithm.
	//
	// Optional. Default: 2.0
	Multiplier float64

	// MaxRetryCount defines maximum retry count for the backoff algorithm.
	//
	// Optional. Default: 10
	MaxRetryCount int
	// contains filtered or unexported fields
}

Config defines the config for addon.

type ExponentialBackoff

type ExponentialBackoff struct {
	// InitialInterval is the initial time interval for backoff algorithm.
	InitialInterval time.Duration

	// MaxBackoffTime is the maximum time duration for backoff algorithm. It limits
	// the maximum sleep time.
	MaxBackoffTime time.Duration

	// Multiplier is a multiplier number of the backoff algorithm.
	Multiplier float64

	// MaxRetryCount is the maximum number of retry count.
	MaxRetryCount int
	// contains filtered or unexported fields
}

ExponentialBackoff is a retry mechanism for retrying some calls.

func NewExponentialBackoff

func NewExponentialBackoff(config ...Config) *ExponentialBackoff

NewExponentialBackoff creates a ExponentialBackoff with default values.

func (*ExponentialBackoff) Retry

func (e *ExponentialBackoff) Retry(f func() error) error

Retry is the core logic of the retry mechanism. If the calling function returns nil as an error, then the Retry method is terminated with returning nil. Otherwise, if all function calls are returned error, then the method returns this error.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL