Backoff Strategies
When a request fails it may be desirable to retry the request in the future. For this the SDKs employ a couple of strategies to give the best chance of a successful request.
Constant Backoff
A constant backoff applies a fixed period of time between each failed request.
- Go
Constant Backoff
package mainimport ( "time" "github.com/StatusCakeDev/statuscake-go" "github.com/StatusCakeDev/statuscake-go/backoff" "github.com/StatusCakeDev/statuscake-go/credentials")func main() { bearer := credentials.NewBearerWithStaticToken("my-api-token") client := statuscake.NewClient( statuscake.WithRequestCredentials(bearer), statuscake.WithBackoff(backoff.Constant{ BaseDelay: time.Duration(5) * time.Second, }), )}
Exponential Backoff
An exponential backoff applies an exponential function on the time between each failed request.
- Go
Exponential Backoff
package mainimport ( "time" "github.com/StatusCakeDev/statuscake-go" "github.com/StatusCakeDev/statuscake-go/backoff" "github.com/StatusCakeDev/statuscake-go/credentials")func main() { bearer := credentials.NewBearerWithStaticToken("my-api-token") client := statuscake.NewClient( statuscake.WithRequestCredentials(bearer), statuscake.WithBackoff(backoff.Exponential{ BaseDelay: time.Duration(1) * time.Second, Multiplier: 2.0, Jitter: 0.2, MaxDelay: time.Duration(30) * time.Second, }), )}
Linear Backoff
Linear backoff applies a linear functions on the time between each failed request.
- Go
Linear Backoff
package mainimport ( "time" "github.com/StatusCakeDev/statuscake-go" "github.com/StatusCakeDev/statuscake-go/backoff" "github.com/StatusCakeDev/statuscake-go/credentials")func main() { bearer := credentials.NewBearerWithStaticToken("my-api-token") client := statuscake.NewClient( statuscake.WithRequestCredentials(bearer), statuscake.WithBackoff(backoff.Linear{ BaseDelay: time.Duration(1) * time.Second, Jitter: 0.2, MaxDelay: time.Duration(30) * time.Second, }), )}