1

我正在使用适用于 PHP 的 AWS 开发工具包以编程方式与 DynamoDB 交互。

我想检测对 DynamoDB 的请求是否受到限制,以便在短暂延迟后发出另一个请求。

现在,我在假设未满足限制请求的情况下进行操作。Amazon FAQs建议在发生限制时返回 400 错误。

所以我目前的逻辑看起来像这样:

for( $i=0; $i<10; $i++ ) {

    $response = $dynamodb->get_item($get_item_args);

    if( $response->isOK() ) {

        break;

    } elseif( $i < 9 ) {

        sleep(1);
    }
}

我想这可行,但它有点愚蠢。特别是,它将重复所有失败的请求,而不仅仅是受限制的请求。如果出现不可解决的错误,我真的不想重复请求。

为了使它更智能,我想在一个受限制的响应中查看一个唯一标识符(即特定的错误消息)。但是对于我的一生,我无法捕获(或在互联网上的任何地方找到)样本限制响应。

补偿限制风险和最大化满足请求的可能性的最佳方法是什么?

4

1 回答 1

2

事实证明,AWS 开发工具包将自动重试受限制的请求,直到成功。所以我上面的努力是不必要的(因为我使用的是 AWS SDK for PHP)。

Amazon DynamoDB文档页面中的处理错误对 ProvisionedThroughputExceededException 错误说明如下:

适用于 Amazon DynamoDB 的 AWS 开发工具包会自动重试收到此异常的请求。因此,您的请求最终会成功,除非请求太大或您的重试队列太大而无法完成。

于 2012-12-08T18:16:01.803 回答