gpt4 book ai didi

javascript - Node.js 捕获并重试 ECONNRESET

转载 作者:太空宇宙 更新时间:2023-11-04 00:01:24 24 4
gpt4 key购买 nike

在我的 AWS Lambda Node.js 代码中,我使用以下代码调用 post 方法将文档索引到 AWS Elasticsearch 服务:

var endpoint = 'ABC-XYZ.us-east-1.es.amazonaws.com';

exports.handler = function(input, context) {
...

// post documents to the Amazon Elasticsearch Service
post(endpoint, elasticsearchBulkData, function(error, success, statusCode, failedItems) {
if (error) {
console.log('...');

if (failedItems && failedItems.length > 0) {
console.log(...);
}

// NOTE: Instead of failing, we are forcing a success, as we do not want retries
context.succeed('Success');
} else {
// console.log('Success: ' + JSON.stringify(success));
context.succeed('Success');
}
});
}

...
...
function post(endpoint, body, callback, lastTimeout) {
lastTimeout || (lastTimeout = 500);
var requestParams = buildRequest(endpoint, body);

var request = https.request(requestParams, function(response) {
var responseBody = '';
response.on('data', function(chunk) {
responseBody += chunk;
});
response.on('end', function() {
var info = JSON.parse(responseBody);
var failedItems;
var success;

if (response.statusCode >= 200 && response.statusCode < 299) {
failedItems = info.items.filter(function(x) {
return x.index.status >= 300;
});

success = { ...};
}

var error = response.statusCode !== 200 || info.errors === true ? {
"statusCode": response.statusCode,
"responseBody": responseBody
} : null;

callback(error, success, response.statusCode, failedItems);
});
}).on('error', function(e) {
console.error(e.stack || e);
//callback(e);
lastTimeout *= 2;
console.log('lastTimeout: ' + lastTimeout + " for cluster: " + endpoint) ;
setTimeout(function() {
post(endpoint, body, callback, lastTimeout);
}, lastTimeout);
});
request.end(requestParams.body);
}

...

有时我会收到错误:套接字挂起ECONNRESET

我的问题是:捕获此错误并重试的最佳方法是什么?

我添加了基于 this answersetTimeout 代码段看起来确实有效,但我不确定这是否是正确的方法。

Node.js 版本是 4.3。

我正在考虑将 Promiseresolvereject 一起使用,但作为 JS 新手,我不确定如何在我的 post 调用中使用 Promise。

我还浏览了this link但不清楚如何用 fetch_retry

包装我的帖子调用

最佳答案

我有一个 Node 应用程序,它时不时地抛出一个我无法捕获的异常:

Error: read ECONNRESET at TLSWrap.onread (net.js:622:25)

我不知道这是否与您的问题有关,但似乎是这样。经过一些研究,这似乎是一个错误:https://github.com/nodejs/node/issues/23237并且在上一个版本中已经解决了。

现在我运行的是 Node 版本8,我注意到您正在使用版本4。我将在不久的将来更新生产服务器,也许您也可以尝试一下。如果问题在我更新服务器之前没有答案,我会带着结果返回这里。

关于javascript - Node.js 捕获并重试 ECONNRESET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54581696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com