【grpc】 9.超时重试
服务端设置超时
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { // 设置处理超时时间为1秒钟 ctx, cancel := context.WithTimeout(ctx, time.Second*1) defer cancel() // 处理请求 ... }
1
2
3
4
5
6
7
8
9客户端设置超时重试
conn, err := grpc.Dial( "localhost:50051", grpc.WithInsecure(), grpc.WithTimeout(time.Second*3), // 超时时间为3s grpc.WithUnaryInterceptor(grpc_retry.UnaryClientInterceptor( grpc_retry.WithMax(3), grpc_retry.WithPerRetryTimeout(1*time.Second), )), ) // 设置gRPC客户端最多重试3次,每次重试的超时时间为1秒。如果在重试次数用尽后仍然无法得到响应,客户端将终止连接并返回错误。
1
2
3
4
5
6
7
8
9
10
11三方库实现中间件超时重试: https://github.com/grpc-ecosystem/go-grpc-middleware/blob/main/interceptors/retry/doc.go
通过超时重试可以完成熔断的功能
上次更新: 2023/05/04, 15:30:48