访问限流

引入依赖

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

初始化 polaris.yaml

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

SDK实例构建

当初始化好 polaris.yaml 文件之后,你可以直接使用在 package github.com/polarismesh/polaris-go 下的 NewLimitAPI 方法进行构造一个 LimitAPI SDK 实例

  1. import (
  2. ...
  3. "github.com/polarismesh/polaris-go"
  4. )
  5. func main() {
  6. limiter, err := polaris.NewLimitAPI()
  7. }

请求配额

  1. type QuotaRequest interface {
  2. // SetNamespace 设置命名空间
  3. SetNamespace(string)
  4. // SetService 设置服务名
  5. SetService(string)
  6. // SetLabels 设置业务标签信息
  7. // Deprecated: please use AddArgument instead
  8. SetLabels(map[string]string)
  9. // SetMethod set method
  10. SetMethod(method string)
  11. // AddArgument add the match argument
  12. AddArgument(argument model.Argument)
  13. // SetToken set token to acquire
  14. SetToken(uint32)
  15. // SetTimeout 设置单次请求超时时间
  16. SetTimeout(timeout time.Duration)
  17. // SetRetryCount 设置最大重试次数
  18. SetRetryCount(retryCount int)
  19. }

说明:

如果当前 QuotaRequest 还不支持 AddArgument 方法,同时服务端版本 >= 1.11.0,SetLabels 对应的 key 名称如下:

  • 路径: $path
  • 方法: $method
  • 请求头: $header.{标签键}
  • 请求参数: $query.{标签键}
  • 主调服务: $caller_service
  • 主调IP: $caller_ip
  • 自定义: {标签键}

发起请求配额申请

你在接收到请求之后对 QuotaRequest 结构体完成初始化后,只需要调用 LimitAPI.GetQuota 方法即可完成本次请求配额的申请。

  1. ret, err := limiter.GetQuota(QuotaRequest)

对于请求配额结果的结构体如下。

  1. // QuotaFuture 实时/延时分配future
  2. type QuotaFuture interface {
  3. // Done 标识分配是否结束
  4. Done() <-chan struct{}
  5. // Get 等待一段时间后,获取分配结果,用于匀速排队
  6. Get() *model.QuotaResponse
  7. // GetImmediately 立刻获取分配结果,不等待
  8. GetImmediately() *model.QuotaResponse
  9. // Release 释放资源,仅用于并发数限流的场景
  10. Release()
  11. }

如何基于 polaris-go 客户端完成一个节点熔断的程序