retryinterceptor.go 616 B

12345678910111213141516171819
  1. package clientinterceptors
  2. import (
  3. "context"
  4. "github.com/tal-tech/go-zero/core/retry"
  5. "google.golang.org/grpc"
  6. )
  7. // RetryInterceptor retry interceptor
  8. func RetryInterceptor(enable bool) grpc.UnaryClientInterceptor {
  9. return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
  10. if !enable {
  11. return invoker(ctx, method, req, reply, cc, opts...)
  12. }
  13. return retry.Do(ctx, func(ctx context.Context, callOpts ...grpc.CallOption) error {
  14. return invoker(ctx, method, req, reply, cc, callOpts...)
  15. }, opts...)
  16. }
  17. }