1.通过配置retryPolicy的方式
这也是grpc官方库里的示例代码,其他讲retry重试的基本也都是参照这种方法。但是本地配置之后没生效。换用下边第二种方式之后问题解决
https://github.com/grpc/grpc-go/blob/be1d1c10a930/examples/features/retry/client/main.go
2. 使用go-grpc-middleware库的retry配置
参照下边连接里的示例代码,先在opts里配置重试规则,然后grpc.Dial方法里应用这个规则就可以。
相对官方的方法这里的方法配置起来比较简单,而且配置完实验马上就生效了。
https://github.com/grpc-ecosystem/go-grpc-middleware/blob/main/interceptors/retry/examples_test.go
规则示例:
retryOpts := []retry.CallOption{
retry.WithMax(5), // 最大重试次数,大于5时会被设置成5
retry.WithBackoff(retry.BackoffLinear(100 * time.Millisecond)), // 控制重试的时间间隔,固定的时间间隔
retry.WithCodes(codes.Unavailable, codes.DeadlineExceeded), // 需要重试的grpc code
}