连接失败时,通常会有重试的功能,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()
}