@@ -241,7 +241,7 @@ func (f *FlowQuotaAssistant) GetQuota(commonRequest *data.CommonRateLimitRequest
241241 Code : model .QuotaResultOk ,
242242 Info : Disabled ,
243243 }
244- return model .QuotaFutureWithResponse (resp , nil ), nil
244+ return model .QuotaFutureWithResponse (resp ), nil
245245 }
246246 windows , err := f .lookupRateLimitWindow (commonRequest )
247247 if err != nil {
@@ -253,33 +253,37 @@ func (f *FlowQuotaAssistant) GetQuota(commonRequest *data.CommonRateLimitRequest
253253 Code : model .QuotaResultOk ,
254254 Info : RuleNotExists ,
255255 }
256- return model .QuotaFutureWithResponse (resp , nil ), nil
256+ return model .QuotaFutureWithResponse (resp ), nil
257257 }
258258 var maxWaitMs int64 = 0
259- var releaseFuncs = make ([]func () , 0 , len (windows ))
259+ var releaseFuncs = make ([]model. ReleaseFunc , 0 , len (windows ))
260260 for _ , window := range windows {
261261 window .Init ()
262- quotaResult , releaseFunc := window .AllocateQuotaWithRelease (commonRequest )
263- if releaseFunc != nil {
264- releaseFuncs = append (releaseFuncs , releaseFunc )
262+ quotaResult := window .AllocateQuota (commonRequest )
263+ if quotaResult == nil {
264+ continue
265+ }
266+ for i := range quotaResult .ReleaseFuncs {
267+ releaseFuncs = append (releaseFuncs , quotaResult .ReleaseFuncs [i ])
265268 }
266269 // 触发限流,提前返回
267270 if quotaResult .Code == model .QuotaResultLimited {
268271 // 先释放资源
269272 for i := range releaseFuncs {
270- releaseFuncs [i ]()
273+ releaseFuncs [i ](0 )
271274 }
272- return model .QuotaFutureWithResponse (quotaResult , nil ), nil
275+ return model .QuotaFutureWithResponse (quotaResult ), nil
273276 }
274277 // 未触发限流,记录令牌桶的最大排队时间
275278 if quotaResult .WaitMs > maxWaitMs {
276279 maxWaitMs = quotaResult .WaitMs
277280 }
278281 }
279282 return model .QuotaFutureWithResponse (& model.QuotaResponse {
280- Code : model .QuotaResultOk ,
281- WaitMs : maxWaitMs ,
282- }, releaseFuncs ), nil
283+ Code : model .QuotaResultOk ,
284+ WaitMs : maxWaitMs ,
285+ ReleaseFuncs : releaseFuncs ,
286+ }), nil
283287}
284288
285289// lookupRateLimitWindow 计算限流窗口
0 commit comments