@@ -241,7 +241,7 @@ func (f *FlowQuotaAssistant) GetQuota(commonRequest *data.CommonRateLimitRequest
241
241
Code : model .QuotaResultOk ,
242
242
Info : Disabled ,
243
243
}
244
- return model .QuotaFutureWithResponse (resp , nil ), nil
244
+ return model .QuotaFutureWithResponse (resp ), nil
245
245
}
246
246
windows , err := f .lookupRateLimitWindow (commonRequest )
247
247
if err != nil {
@@ -253,33 +253,37 @@ func (f *FlowQuotaAssistant) GetQuota(commonRequest *data.CommonRateLimitRequest
253
253
Code : model .QuotaResultOk ,
254
254
Info : RuleNotExists ,
255
255
}
256
- return model .QuotaFutureWithResponse (resp , nil ), nil
256
+ return model .QuotaFutureWithResponse (resp ), nil
257
257
}
258
258
var maxWaitMs int64 = 0
259
- var releaseFuncs = make ([]func () , 0 , len (windows ))
259
+ var releaseFuncs = make ([]model. ReleaseFunc , 0 , len (windows ))
260
260
for _ , window := range windows {
261
261
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 ])
265
268
}
266
269
// 触发限流,提前返回
267
270
if quotaResult .Code == model .QuotaResultLimited {
268
271
// 先释放资源
269
272
for i := range releaseFuncs {
270
- releaseFuncs [i ]()
273
+ releaseFuncs [i ](0 )
271
274
}
272
- return model .QuotaFutureWithResponse (quotaResult , nil ), nil
275
+ return model .QuotaFutureWithResponse (quotaResult ), nil
273
276
}
274
277
// 未触发限流,记录令牌桶的最大排队时间
275
278
if quotaResult .WaitMs > maxWaitMs {
276
279
maxWaitMs = quotaResult .WaitMs
277
280
}
278
281
}
279
282
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
283
287
}
284
288
285
289
// lookupRateLimitWindow 计算限流窗口
0 commit comments