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  }