限流器使用中间件完成

This commit is contained in:
2025-05-08 11:37:34 +08:00
parent bfbcecb498
commit 4767aeb504
3 changed files with 27 additions and 15 deletions

View File

@ -97,9 +97,11 @@ func NewHttpClient(reqConfig *define.Request, reqOption *RequestOption) (*HttpCl
reqConfig.Header = make(map[string]any)
}
if ua, exist := reqConfig.Header[consts.HeaderKeyUserAgent.String()]; !exist || nil == ua || fmt.Sprintf("%v", ua) == "" {
reqConfig.Header[consts.HeaderKeyUserAgent.String()] = "resty-v2@network/httpclient"
reqConfig.Header[consts.HeaderKeyUserAgent.String()] = "resty-v3@network/httpclient"
}
restyClient, restyRequest := NewRestyClient(reqConfig)
restyClient, restyRequest := NewRestyClient(reqConfig, reqOption)
defer restyClient.Close()
hc := &HttpClient{
Client: restyClient,
request: restyRequest,
@ -296,20 +298,12 @@ func (hc *HttpClient) requestBackendApi() *define.Response {
response = hc.newResponse()
response.Seq = i
response.RequestCount = i + 1
if nil != hc.reqOption.RateLimiter {
if !hc.reqOption.RateLimiter.Allow() {
response.FailInfo = &define.ResponseFailInfo{
Type: define.RequestFailTypeRateLimit,
Message: "rate limit exceeded",
}
// 命中限流, 忽略重试
log.RecordDebug("请求命中限流, 忽略重试策略, 不进行重试", nil, hc.reqCfg)
break
}
}
if response.RestyResponse, err = hc.request.Send(); nil != err {
errType := define.RequestFailTypeSend
if netErr, ok := err.(net.Error); ok {
if err.Error() == define.ErrRateLimitExceeded.Error() {
// 命中限流
errType = define.RequestFailTypeRateLimit
} else if netErr, ok := err.(net.Error); ok {
if netErr.Timeout() {
// 请求超时
errType = define.RequestFailTypeTimeoutError