通过Go自动插桩可以零侵入地为gRPC请求添加基于sentinel-golang的流量防护能力。实现方式是在google.golang.org/grpc的NewClient函数入口处注入一个流量防护中间件。首先编写hook函数newClientOnEnter,在其中通过grpc.WithChainUnaryInterceptor为客户端连接追加自定义的Unary拦截器。拦截器函数unaryClientInterceptor使用sentinel-golang的API创建Entry,指定资源类型为RPC、流量方向为Outbound,如果sentinel判断触发限流规则则返回BlockError阻断请求,否则正常调用原始invoker。然后在conf.json中配置:{"ImportPath":"google.golang.org/grpc", "Function":"NewClient", "OnEnter":"newClientOnEnter", "Path":"/path/to/hook"}。这种方式同样适用于gRPC Stream请求。此外,还可以针对框架的负载均衡器进行增强,实现灰度路由、标签路由等灰度发布能力,具有很高的扩展性。




