访问限流

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

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

引入依赖

  1. <dependency>
  2. <groupId>com.tencent.polaris</groupId>
  3. <artifactId>grpc-java-polaris</artifactId>
  4. <version>${grpc-java-polaris.version}</version>
  5. </dependency>

初始化 polaris.yaml

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

gRPC Server 构建

  1. Server polarisGrpcServer = PolarisGrpcServerBuilder
  2. .forPort(0)
  3. .namespace("default")
  4. .applicationName("RateLimitServerGRPCJava")
  5. // 注入限流的 server 拦截器
  6. .intercept(PolarisHelper.buildRateLimitInterceptor()
  7. .build())
  8. .heartbeatInterval(5)
  9. .addService(new HelloProvider())
  10. .addService(new HiProvider())
  11. .build();

如何配置访问限流参数

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

比如对 gRPC-Java 中的 sayHello 方法,对 Metadata 中 uid 为 user-1 的进行限流,速率为10/s。

访问限流 - 图1

  • 请求匹配规则为 请求头(HEADER):
    • 标签来源: RPC 调用的额外标签信息,即 interceptCall(ServerCall<ReqT, RespT> call, Metadata headers, ServerCallHandler<ReqT, RespT> next)

验证

可根据 grpc-java-polaris example 开展