- Variables
- BackoffFunc">type BackoffFunc
- CallOption">type CallOption
- 例子:
Variables
var (
DefaultRetriableCodes = []codes.Code{codes.ResourceExhausted, codes.Unavailable}
)
func StreamClientInterceptor(optFuncs …CallOption) grpc.StreamClientInterceptor
返回一个新的重试的客户端流拦截器
func UnaryClientInterceptor(optFuncs …CallOption) grpc.UnaryClientInterceptor
返回一个新的重试的一元客户端拦截器
type BackoffFunc
BackoffFunc表示控制调用重试之间的回退持续时间的一系列函数
type BackoffFunc func(attempt uint) time.Duration
func BackoffExponential(scalar time.Duration) BackoffFunc
- 为每一次尝试产生递增的间隔。标量乘以2的当前尝试次数。因此,第一个标量为100ms的重试是100ms,而第5次尝试是1.6s。
func BackoffExponentialWithJitter(scalar time.Duration, jitterFraction float64) BackoffFunc
- 同BackoffExponential,但增加了jitterFraction抖动,jitterFraction的单位是秒
func BackoffLinear(waitBetween time.Duration) BackoffFunc 在重试间等待一段固定时间
func BackoffLinearWithJitter(waitBetween time.Duration, jitterFraction float64) BackoffFunc
- 同 BackoffLinear,但增加了jitterFraction抖动,jitterFraction的单位是秒
- 例如,waitBetween=1和jitter=0.10可以生成900ms到1100ms之间的等待。
type CallOption
CallOption is a grpc.CallOption
func Disable() CallOption
func WithBackoff(bf BackoffFunc) CallOption 用于控制重试间隔时间
func WithCodes(retryCodes …codes.Code) CallOption
func WithMax(maxRetries uint) CallOption
func WithPerRetryTimeout(timeout time.Duration) CallOption
例子:
conn, err := grpc.Dial("",grpc.WithInsecure(),
// 开启 grpc 中间件的重试功能
grpc.WithUnaryInterceptor(
grpc_retry.UnaryClientInterceptor(
grpc_retry.WithBackoff(grpc_retry.BackoffLinear(time.Duration(1)*time.Millisecond)), // 重试间隔时间
grpc_retry.WithMax(3), // 重试次数
grpc_retry.WithPerRetryTimeout(time.Duration(5)*time.Millisecond), // 重试时间
// 返回码为如下值时重试
grpc_retry.WithCodes(codes.ResourceExhausted, codes.Unavailable, codes.DeadlineExceeded),
),
),
)
client := pb_testproto.NewTestServiceClient(conn)
pong, _ := client.Ping(
ctx,
&pb_testproto.PingRequest{},
grpc_retry.WithMax(3),
grpc_retry.WithPerRetryTimeout(1*time.Second))