定时任务 任务队列 任务调度 并发控制
- 定时任务运行有几点需要注意:
- 限流:控制QPS(每秒查询数)涉及到实施限流(rate limiting)机制来控制客户端对服务器的请求速率
- 错误处理得当+避免重复处理已经处理过的数据
并发控制 bottleneck
一次发送几条数据,用来控制qps。实际原理就是延迟几秒后发送。
// egg-node函数中做的测试:
const Bottleneck = require('bottleneck');
const limiter = new Bottleneck({
maxConcurrent: 1,
minTime: 5000 // 至少5000毫秒间隔来执行请求
});
async function run() {
console.log("执行函数------");
}
for(let i = 0; i < 10; i++) {
console.log(`第 ${i} 次:`, moment().format('YYYYMMDD HH:mm:ss'))
const result = await limiter.schedule(run);
console.log(`第 ${i} 次:`, moment().format('YYYYMMDD HH:mm:ss'))
}
如上示例:第一次立即执行,之后会在 run() 函数执行前等待 5s。