-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
π docs: Add Retry Addon documentation (#3330)
* π Doc: Add addon tab to /docs * π Doc: Add retry to addon docs * π Doc: Update retry README.md * π¨ Styles: Update addon/retry docs to respect markdownlint-cli2 * π Doc: Update addon tab description to be singular * π Doc: Use retry prefix in retry docs * π Doc: Add retry addon to whats_new.md * π¨ Styles: Update whats_new.md to respect markdownlint-cli2
- Loading branch information
Showing
7 changed files
with
228 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ | ||
"label": "\uD83D\uDD0C Addon", | ||
"position": 5, | ||
"collapsed": true, | ||
"link": { | ||
"type": "generated-index", | ||
"description": "Addon is an additional useful package that can be used in Fiber." | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
--- | ||
id: retry | ||
--- | ||
|
||
# Retry Addon | ||
|
||
Retry addon for [Fiber](https://github.com/gofiber/fiber) designed to apply retry mechanism for unsuccessful network | ||
operations. This addon uses an 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 an 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 ...retry.Config) *retry.ExponentialBackoff | ||
``` | ||
|
||
## Examples | ||
|
||
```go | ||
package main | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/gofiber/fiber/v3/addon/retry" | ||
"github.com/gofiber/fiber/v3/client" | ||
) | ||
|
||
func main() { | ||
expBackoff := retry.NewExponentialBackoff(retry.Config{}) | ||
|
||
// Local variables that will be used inside of Retry | ||
var resp *client.Response | ||
var err error | ||
|
||
// Retry a network request and return an error to signify to try again | ||
err = expBackoff.Retry(func() error { | ||
client := client.New() | ||
resp, err = client.Get("https://gofiber.io") | ||
if err != nil { | ||
return fmt.Errorf("GET gofiber.io failed: %w", err) | ||
} | ||
if resp.StatusCode() != 200 { | ||
return fmt.Errorf("GET gofiber.io did not return OK 200") | ||
} | ||
return nil | ||
}) | ||
|
||
// If all retries failed, panic | ||
if err != nil { | ||
panic(err) | ||
} | ||
fmt.Printf("GET gofiber.io succeeded with status code %d\n", resp.StatusCode()) | ||
} | ||
``` | ||
|
||
## 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 | ||
} | ||
``` | ||
|
||
## 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, | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters