访问限流

当前支持针对 gRPC 消息的以下内容进行访问限流:

消息类型gRPC 消息内容路由规则请求类型
消息头metadata请求头(HEADER)
gRPC方法method路径(PATH)

引入依赖

  1. go get github.com/polarismesh/grpc-go-polaris@latest

初始化 polaris.yaml

你需要在项目的根路径下创建一个 polaris.yaml 文件用于 grpc-go-polaris 初始化 polaris sdk。polaris.yaml配置详细

gRPC Server 构建

  1. listen, err := net.Listen("tcp", "0.0.0.0:0")
  2. if err != nil {
  3. log.Fatal(err)
  4. }
  5. listenAddr := listen.Addr().String()
  6. interceptor := polaris.NewRateLimitInterceptor().WithServiceName("RateLimitEchoServerGRPC")
  7. // 注册 polaris 服务限流拦截器
  8. srv := grpc.NewServer(grpc.UnaryInterceptor(interceptor.UnaryInterceptor))
  9. pb.RegisterEchoServerServer(srv, &EchoRateLimitService{})
  10. // 启动服务
  11. if err := polaris.Serve(srv, listen,
  12. polaris.WithServiceName("RateLimitEchoServerGRPC"),
  13. ); nil != err {
  14. log.Printf("listen err: %v", err)
  15. }

如何配置访问限流参数

gRPC-Go 中的 PolarisMesh RateLimiter 扩展点实现,能够根据用户配置的限流规则,自动的从当前 RPC 调用上下文以及请求信息中识别出需要参与限流的请求标签信息。

比如对 gRPC-Go 中的 Echo(context.Context, &EchoRequest) 方法,对 Metadata 中 uid 为 user-1 的进行限流,速率为10/s。

访问限流 - 图1

  • 请求匹配规则为 请求头(HEADER):
    • 标签来源: RPC 调用的额外标签信息,即 metadata.FromIncomingContext(context.Context)

验证

可根据 grpc-polaris-go example 开展