100 lines
2.8 KiB
Go
100 lines
2.8 KiB
Go
/**
|
||
* Tencent is pleased to support the open source community by making polaris-go available.
|
||
*
|
||
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||
*
|
||
* Licensed under the BSD 3-Clause License (the "License");
|
||
* you may not use this file except in compliance with the License.
|
||
* You may obtain a copy of the License at
|
||
*
|
||
* https://opensource.org/licenses/BSD-3-Clause
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software distributed
|
||
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||
* specific language governing permissions and limitations under the License.
|
||
*/
|
||
|
||
package api
|
||
|
||
import (
|
||
"time"
|
||
|
||
"github.com/polarismesh/polaris-go/pkg/model"
|
||
)
|
||
|
||
// QuotaRequest 配额查询请求
|
||
type QuotaRequest interface {
|
||
|
||
// SetNamespace 设置命名空间
|
||
SetNamespace(string)
|
||
|
||
// SetService 设置服务名
|
||
SetService(string)
|
||
|
||
// SetLabels 设置业务标签信息
|
||
// Deprecated: please use AddArgument instead
|
||
SetLabels(map[string]string)
|
||
|
||
// SetMethod set method
|
||
SetMethod(method string)
|
||
|
||
// AddArgument add the match argument
|
||
AddArgument(argument model.Argument)
|
||
|
||
// SetToken set token to acquire
|
||
SetToken(uint32)
|
||
|
||
// SetTimeout 设置单次请求超时时间
|
||
SetTimeout(timeout time.Duration)
|
||
|
||
// SetRetryCount 设置最大重试次数
|
||
SetRetryCount(retryCount int)
|
||
}
|
||
|
||
// NewQuotaRequest 创建配额查询请求
|
||
func NewQuotaRequest() QuotaRequest {
|
||
return &model.QuotaRequestImpl{}
|
||
}
|
||
|
||
// QuotaFuture 实时/延时分配future
|
||
type QuotaFuture interface {
|
||
// Done 标识分配是否结束
|
||
Done() <-chan struct{}
|
||
// Get 等待一段时间后,获取分配结果,用于匀速排队
|
||
Get() *model.QuotaResponse
|
||
// GetImmediately 立刻获取分配结果,不等待
|
||
GetImmediately() *model.QuotaResponse
|
||
// Release 释放资源,仅用于并发数限流的场景
|
||
Release()
|
||
}
|
||
|
||
const (
|
||
// QuotaResultOk 限流状态值
|
||
QuotaResultOk = model.QuotaResultOk
|
||
// QuotaResultLimited 限流结果
|
||
QuotaResultLimited = model.QuotaResultLimited
|
||
)
|
||
|
||
// LimitAPI 限流相关的API相关接口
|
||
type LimitAPI interface {
|
||
SDKOwner
|
||
// GetQuota 获取限流配额,一次接口只获取一个配额
|
||
GetQuota(request QuotaRequest) (QuotaFuture, error)
|
||
// Destroy 销毁API,销毁后无法再进行调用
|
||
Destroy()
|
||
}
|
||
|
||
var (
|
||
// NewLimitAPI 通过以默认域名为埋点server的默认配置创建LimitAPI
|
||
NewLimitAPI = newLimitAPI
|
||
// NewLimitAPIByConfig 通过配置对象创建LimitAPI
|
||
NewLimitAPIByConfig = newLimitAPIByConfig
|
||
// NewLimitAPIByContext 通过sdkContext创建LimitAPI
|
||
NewLimitAPIByContext = newLimitAPIByContext
|
||
// NewLimitAPIByFile 通过配置文件创建SDK LimitAPI对象
|
||
NewLimitAPIByFile = newLimitAPIByFile
|
||
// NewLimitAPIByAddress 通过address创建LimitAPI
|
||
NewLimitAPIByAddress = newLimitAPIByAddress
|
||
)
|