- 所有实例之间维护时间窗口队列,如果最近一秒内的元素数量超过阈值,施行流控拦截
- 如果最近一秒内的元素数超过阈值,新的元素不会被加入,而是等待流控拦截最大时长过去之后再开始继续加入元素。
//que 时间戳队列 tps 单位时间容量 timeValue时间戳 bool baseCheck(std::deque<long long> &que, int tps, long long timeValue) { if (que.size() >= tps) { if (timeValue - que.front() < m_interval_time) { XLOG(debug) << "tps limit, check deque failed"; return false; } else { que.pop_front(); que.push_back(timeValue); XLOG(debug) << "history deque task timeout, check success"; return true; } } else { que.push_back(timeValue); XLOG(debug) << "deque size < tps, check success"; return true; } }