fix: 账户限流预算小于单卡调用数时卡永远领不到
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m36s

领取脚本在一张卡同组到期调用数大于剩余预算时停止领取,账户 QPS 很小或长期接近上限时,同时到期多项的卡会一直排不上,整个账户停止轮询。改为本轮该组尚未占用且预算大于 0 时至少放行一张,超出部分由网关限流等待模式排队;预算为 0 时仍不领取。
This commit is contained in:
邹进
2026-10-25 23:39:25 +09:00
parent 466cb1f9e8
commit 1369fed642

View File

@@ -60,7 +60,10 @@ local function tryClaim(cardId, fromPriority, qkey)
end
end
for g, n in pairs(need) do
if budget[g] ~= nil and (used[g] or 0) + n > budget[g] then
-- 本轮该组尚未占用且预算大于 0 时至少放行一张卡:否则一张卡的调用数大于预算(如账户 1 QPS、卡同时到期 3 项)时永远领不到;
-- 超出部分由网关限流等待模式在调用时排队。
local u = used[g] or 0
if budget[g] ~= nil and (budget[g] <= 0 or (u > 0 and u + n > budget[g])) then
stop = true
return false
end