连接失败时,通常会有重试的功能,backoff就是用来干这个的,默认为DefaultConfig
Variables
var DefaultConfig = Config{BaseDelay: 1.0 * time.Second,Multiplier: 1.6,Jitter: 0.2,MaxDelay: 120 * time.Second,}
type Config
type Config struct {// 第一次失败后退出的时间BaseDelay time.Duration// 递增因子Multiplier float64// 随机抖动的范围Jitter float64// 重试时间的上线MaxDelay time.Duration}
当我们连接到一个失败的后端时,通常希望不要立即重试(以避免泛滥的网络或服务器的请求),而是做某种形式的指数backoff
demo
func main() {connectParams := grpc.ConnectParams{Backoff:backoff.Config{// 第一次失败后退出的时间BaseDelay:5*time.Second,// 递增因子Multiplier :2.0,// 随机抖动的范围Jitter:1.0,// 重试时间的上线,这个会影响到失败节点上线后重新开始服务的时间MaxDelay :120*time.Second,},// 希望的拿到连接的最短时间,一般Backoff用默认的就行,直接再设置一个最短时间,过多少秒后才去尝试获取连接MinConnectTimeout : 10*time.Second,}conn, err := grpc.Dial(address, grpc.WithInsecure(),grpc.WithConnectParams(connectParams))defer conn.Close()}
