我在 AWS Lamba 函数内的 Typescript 上使用瓶颈库(启用了集群)。我们使用它来限制对外部 API 的请求。该库可以正常工作一段时间,直到某个时候我开始让作业停止运行。我看到此时 await requestLimiter.schedule() 调用被阻塞,直到 lambda 超时。从那时起,传入作业(它们排队并且不运行)继续发生数小时,直到我手动刷新 AWS Redis 实例。
这是我创建瓶颈实例的方法:
this.requestLimiter = new Bottleneck({
id: `request-limiter`,
datastore: "redis",
clearDatastore: false,
maxConcurrent: 1,
minTime: 133,
clientOptions: {
host: REDIS_HOST
port: REDIS_PORT
},
trackDoneStatus: true
});
这是我在日志中看到的排队但未执行的作业:
28 Jul 2021 07:09:04.909{
"pid": 9,
"level": 30,
"message": "Event triggered: received",
"job": [
{
"args": [],
"options": {
"priority": 5,
"weight": 1,
"expiration": null,
"id": "job1"
}
}
],
"msg": "bottleneck debug event",
"time": "2021-07-28T07:09:04.566Z",
"v": 0,
"_level": "info"
}
28 Jul 2021 07:09:04.909{
"pid": 9,
"level": 30,
"message": "Calling Redis script: init.lua",
"job": [
1627456144598,
"qbrslv11ujd",
0,
"2.19.5",
"maxConcurrent",
"1",
"minTime",
"113",
"highWater",
"",
"strategy",
"1",
"penalty",
"",
"reservoir",
"",
"reservoirRefreshInterval",
"",
"reservoirRefreshAmount",
"",
"reservoirIncreaseInterval",
"",
"reservoirIncreaseAmount",
"",
"reservoirIncreaseMaximum",
"",
"id",
"request-limiter",
"version",
"2.19.5",
"groupTimeout",
"",
"clientTimeout",
"10000"
],
"msg": "bottleneck debug event",
"time": "2021-07-28T07:09:04.598Z",
"v": 0,
"_level": "info"
}
28 Jul 2021 07:09:04.909{
"pid": 9,
"level": 30,
"message": "Calling Redis script: register_client.lua",
"job": [
1627456144601,
"qbrslv11ujd",
0
],
"msg": "bottleneck debug event",
"time": "2021-07-28T07:09:04.601Z",
"v": 0,
"_level": "info"
}
28 Jul 2021 07:09:04.909{
"pid": 9,
"level": 30,
"message": "Calling Redis script: submit.lua",
"job": [
1627456144602,
"qbrslv11ujd",
"0",
"1"
],
"msg": "bottleneck debug event",
"time": "2021-07-28T07:09:04.602Z",
"v": 0,
"_level": "info"
}
28 Jul 2021 07:09:04.909{
"pid": 9,
"level": 30,
"message": "Event triggered: queued",
"job": [
{
"args": [],
"options": {
"priority": 5,
"weight": 1,
"expiration": null,
"id": "job1"
},
"reachedHWM": false,
"blocked": false
}
],
"msg": "bottleneck debug event",
"time": "2021-07-28T07:09:04.603Z",
"v": 0,
"_level": "info"
}
28 Jul 2021 07:09:04.909{
"pid": 9,
"level": 30,
"message": "Draining job1",
"job": {
"args": [],
"options": {
"priority": 5,
"weight": 1,
"expiration": null,
"id": "job1"
}
},
"msg": "bottleneck debug event",
"time": "2021-07-28T07:09:04.604Z",
"v": 0,
"_level": "info"
}
28 Jul 2021 07:09:04.909{
"pid": 9,
"level": 30,
"message": "Calling Redis script: register.lua",
"job": [
1627456144604,
"qbrslv11ujd",
"8998iaiwo2j",
"1",
""
],
"msg": "bottleneck debug event",
"time": "2021-07-28T07:09:04.604Z",
"v": 0,
"_level": "info"
}
28 Jul 2021 07:09:04.909{
"pid": 9,
"level": 30,
"message": "Drained job1",
"job": {
"success": false,
"args": [],
"options": {
"priority": 5,
"weight": 1,
"expiration": null,
"id": "job1"
}
},
"msg": "bottleneck debug event",
"time": "2021-07-28T07:09:04.605Z",
"v": 0,
"_level": "info"
}
之后没有其他关于 job1 的日志。
这里可能是什么问题?任何指针和建议将不胜感激。如果您需要更多信息,请告诉我。谢谢!