在研究了这些异常后,我已经尝试了很多,但到目前为止,没有一个建议的解决方案对我有帮助,因此另一个堆栈溢出。也许我错过了什么。
我正在使用'请求'模块和我有800个请求/秒可用于我想要使用的REST Api。因此,我编写了一个包装器类,其中包括所有可能的API端点的速率限制+方法。每当我尝试执行超过约100个请求/秒(作为单个实例或集群)时,我会得到如下所示的异常:
错误:getaddrinfo ENOTFOUND api.domain.com api.domain.com:80
错误:ESOCKETTIMEDOUT
错误:ETIMEDOUT
这些是我用于请求的默认选项:
apiRequest = request.defaults({
headers: {
Authorization: `Bearer ${this.apiJwt}`,
},
json: true,
timeout: 6000,
baseUrl: this.baseUrl,
pool: { maxSockets: Infinity },
})
// First parameter is priority, second the function to be called,
// third parameter is the first parameter for the called function
this.limiter.schedulePriority(priority, this.apiRequest, url)
我尝试过的事情:
process.env.UV_THREADPOOL_SIZE = 128
(参见:Node.js request module getting ETIMEDOUT and ESOCKETTIMEDOUT)pool: { maxSockets: Infinity }
添加到默认请求选项(请参阅上面的代码段)我是否缺少执行那么多并发请求的东西?也许process.env.UV_THREADPOOL_SIZE没有被正确应用(有没有办法检查)?