retryinterceptor.go 780 B

12345678910111213141516171819202122232425
  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. if !enable {
  10. return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn,
  11. invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
  12. return invoker(ctx, method, req, reply, cc, opts...)
  13. }
  14. }
  15. return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn,
  16. invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
  17. return retry.Do(ctx, func(ctx context.Context, callOpts ...grpc.CallOption) error {
  18. return invoker(ctx, method, req, reply, cc, callOpts...)
  19. }, opts...)
  20. }
  21. }