mirror of
https://github.com/gofiber/fiber.git
synced 2025-05-31 03:42:48 +00:00
* v3-retry-mechanism: Add retry mechanism * General logic is implemented. * Unit tests are added. Signed-off-by: Gökhan Özeloğlu <gokhan.ozeloglu@deliveryhero.com> * Refactor test assertion * Replaced testify/assert with fiber's assert. Signed-off-by: Gökhan Özeloğlu <gokhan.ozeloglu@deliveryhero.com> * Add test for next method * currentInterval bug is fixed in Retry. * If condition is fixed in next. * struct definition refactored and if condtion is removed in TestExponentialBackoff_Retry. Signed-off-by: Gökhan Özeloğlu <gokhan.ozeloglu@deliveryhero.com> * Add config for retry. * Constant variables are removed. * Helper function is added for default. * Helper function is used in New function. Signed-off-by: Gökhan Özeloğlu <gokhan.ozeloglu@deliveryhero.com> * Replace math/rand with crypto/rand * Random number generation package has been replaced with more secure one, crypto/rand. Signed-off-by: Gökhan Özeloğlu <gokhan.ozeloglu@deliveryhero.com> * Add a README for retry middleware * Explanation and examples are added. Signed-off-by: Gökhan Özeloğlu <gokhan.ozeloglu@deliveryhero.com> * Add comment line for documentation * Comment lines are added for ExponentialBackoff variables. Signed-off-by: Gökhan Özeloğlu <gokhan.ozeloglu@deliveryhero.com> * Run go mod tidy * Unused package(s) removed. Signed-off-by: Gökhan Özeloğlu <gokhan.ozeloglu@deliveryhero.com> * move middleware -> addon Signed-off-by: Gökhan Özeloğlu <gokhan.ozeloglu@deliveryhero.com> Co-authored-by: Muhammed Efe Çetin <efectn@protonmail.com>
97 lines
2.4 KiB
Markdown
97 lines
2.4 KiB
Markdown
# Retry Addon
|
|
|
|
Retry addon for [Fiber](https://github.com/gofiber/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
|
|
|
|
- [Retry Addon](#retry-addon)
|
|
- [Table of Contents](#table-of-contents)
|
|
- [Signatures](#signatures)
|
|
- [Examples](#examples)
|
|
- [Default Config](#default-config)
|
|
- [Custom Config](#custom-config)
|
|
- [Config](#config)
|
|
- [Default Config Example](#default-config-example)
|
|
|
|
## Signatures
|
|
|
|
```go
|
|
func NewExponentialBackoff(config ...Config) *ExponentialBackoff
|
|
```
|
|
|
|
## Examples
|
|
|
|
Firstly, import the addon from Fiber,
|
|
|
|
```go
|
|
import (
|
|
"github.com/gofiber/fiber/v3/addon/retry"
|
|
)
|
|
```
|
|
|
|
## Default Config
|
|
|
|
```go
|
|
retry.NewExponentialBackoff()
|
|
```
|
|
|
|
## Custom Config
|
|
|
|
```go
|
|
retry.NewExponentialBackoff(retry.Config{
|
|
InitialInterval: 2 * time.Second,
|
|
MaxBackoffTime: 64 * time.Second,
|
|
Multiplier: 2.0,
|
|
MaxRetryCount: 15,
|
|
})
|
|
```
|
|
|
|
## Config
|
|
|
|
```go
|
|
// 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
|
|
|
|
```go
|
|
// 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,
|
|
}
|
|
``` |