根据这个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。 你能指出我的错误在哪里吗?
由于
答案 0 :(得分:7)
retryDelayOptions
和maxRetries
是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);
}
}
}