最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Node.js的渔获物和重试ECONNRESET

IT培训 admin 5浏览 0评论

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版。我会更新在不久的将来生产服务器,也许你可以尝试也。如果这个问题没有答案,直到我已经更新了我的服务器,我会在这里回来的结果。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论