22 lines
540 B
Go
22 lines
540 B
Go
package consuming
|
|
|
|
import (
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
minBackoffDuration = 10 * time.Millisecond
|
|
maxBackoffDuration = 5 * time.Second
|
|
)
|
|
|
|
func getNextBackoffDuration(currentBackoff time.Duration, retries int) time.Duration {
|
|
if currentBackoff >= maxBackoffDuration {
|
|
return maxBackoffDuration
|
|
}
|
|
//nolint:gosec // it's a jitter.
|
|
jitter := time.Duration(rand.Int63n(minBackoffDuration.Milliseconds())) * time.Millisecond
|
|
newBackoff := (minBackoffDuration + jitter) * (1 << retries)
|
|
return min(newBackoff, maxBackoffDuration)
|
|
}
|