github.com/lingyao2333/mo-zero@v1.4.1/zrpc/internal/clientinterceptors/breakerinterceptor.go (about) 1 package clientinterceptors 2 3 import ( 4 "context" 5 "path" 6 7 "github.com/lingyao2333/mo-zero/core/breaker" 8 "github.com/lingyao2333/mo-zero/zrpc/internal/codes" 9 "google.golang.org/grpc" 10 ) 11 12 // BreakerInterceptor is an interceptor that acts as a circuit breaker. 13 func BreakerInterceptor(ctx context.Context, method string, req, reply interface{}, 14 cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { 15 breakerName := path.Join(cc.Target(), method) 16 return breaker.DoWithAcceptable(breakerName, func() error { 17 return invoker(ctx, method, req, reply, cc, opts...) 18 }, codes.Acceptable) 19 }