Node.js的渔获物和重试ECONNRESET
在我的AWS LAMBDA Node.js的代码,我下面调用POST方法来索引文件AWS Elasticsearch服务代码:
var endpoint = 'ABC-XYZ.us-east-1.es.amazonaws';
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);
}
...
有时我得到Error: socket hang up ECONNRESET
。
我的问题是:什么是赶上这个错误,重试的最佳方式?
我加入了setTimeout
代码段基于this answer,它看起来像它的工作,但我不知道这是做正确的方式。
Node.js的版本是4.3。
我想用qazxsw POI与qazxsw POI和POI qazxsw但作为一个JS新手,我不知道如何利用承诺的在我的岗位通话。
我还通过Promise
去,但尚不清楚如何,我可以换我的电话后与resolve
我有,不时抛出,我不能赶上异常的节点应用:
reject
我不知道它是否涉及您的问题,但似乎如此。经过一番研究,这似乎是一个错误:this link并已在过去的版本中解决。
现在我正在运行的节点版本8,和我注意到您在使用第4版。我会更新在不久的将来生产服务器,也许你可以尝试也。如果这个问题没有答案,直到我已经更新了我的服务器,我会在这里回来的结果。
Node.js的渔获物和重试ECONNRESET
在我的AWS LAMBDA Node.js的代码,我下面调用POST方法来索引文件AWS Elasticsearch服务代码:
var endpoint = 'ABC-XYZ.us-east-1.es.amazonaws';
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);
}
...
有时我得到Error: socket hang up ECONNRESET
。
我的问题是:什么是赶上这个错误,重试的最佳方式?
我加入了setTimeout
代码段基于this answer,它看起来像它的工作,但我不知道这是做正确的方式。
Node.js的版本是4.3。
我想用qazxsw POI与qazxsw POI和POI qazxsw但作为一个JS新手,我不知道如何利用承诺的在我的岗位通话。
我还通过Promise
去,但尚不清楚如何,我可以换我的电话后与resolve
我有,不时抛出,我不能赶上异常的节点应用:
reject
我不知道它是否涉及您的问题,但似乎如此。经过一番研究,这似乎是一个错误:this link并已在过去的版本中解决。
现在我正在运行的节点版本8,和我注意到您在使用第4版。我会更新在不久的将来生产服务器,也许你可以尝试也。如果这个问题没有答案,直到我已经更新了我的服务器,我会在这里回来的结果。