AWS node.js在失败的batchWrite()上自动重试

时间:2017-03-27 15:07:56

标签: node.js amazon-web-services amazon-dynamodb

根据这个aws文档http://docs.aws.amazon.com/general/latest/gr/api-retries.html自动重试功能是在我的案例node.js aws sdk中的aws sdk中构建的。我像这样配置了DocumentClient对象:

var dynamodb = new AWS.DynamoDB.DocumentClient({region: 'us-west-2', retryDelayOptions: {base: 50}, maxRetries: 20});

但我还是无法让它自动重试。我想自动重试所有UnprocessedItems。 你能指出我的错误在哪里吗?

由于

3 个答案:

答案 0 :(得分:7)

retryDelayOptionsmaxRetries是AWS.DynamoDB上的选项。必须通过设置DynamoDB服务来配置DocumentClient。

var dynamodb = new AWS.DynamoDB({maxRetries: 5, retryDelayOptions: {base: 300} });
var docClient = new AWS.DynamoDB.DocumentClient({service : dynamodb});

答案 1 :(得分:3)

AWS Client SDK都具有内置的重试机制,但这些重试是在请求级别。这意味着任何被500级错误服务器拒绝的请求,或者在某些情况下,400级限制错误的请求都将根据配置的设置自动重试。

您要求的是业务层重试行为,该行为未内置于SDK中。 UnprocessedItems集合包含由于各种原因而被服务拒绝的项目,您必须编写自己的逻辑来处理这些项目。

答案 2 :(得分:0)

After sending Response we can handle unprocessed Item's background Process until all unprocessed Items should be complete. below code is useful for you   ==========================================================================
  var AWS= require('aws-sdk');
  var docClient = new AWS.DynamoDB.DocumentClient();
  router.post('/someBatchWrites',(req,res)=>{
      docClient.batchWrite(params, function (error, data) {
                            res.send(error,data)
                            handler(error, data);//handling unprocceesed 
                                       items /back ground
                       })
               });

//hnadle Method      
 function handler(err, data) {
                    if (err) {
                        console.log("Error", err);
                    } else {
                        console.log("Success", data);
                        if (Object.keys(data.UnprocessedItems).length) {
                            setTimeout(() => {
                                docClient.batchWrite({ RequestItems: data.UnprocessedItems }, handler);
                            }, 100000);
                        }
                    }
                }