了解AWS PHP SDK中的重试逻辑

时间:2018-04-01 22:13:18

标签: php amazon-web-services aws-sdk aws-php-sdk

似乎只有DynamoDB和S3Clients有retry logic enabled

似乎retries配置值对其他服务没有影响。是否有一种简单的方法可以在其他方面启用此功能(例如SQS),或者我是否误解了此功能?

我在Java SDK中找到了clientConfig.setUseThrottleRetries(true); option,但还没有找到PHP SDK中的等价物。

1 个答案:

答案 0 :(得分:0)

您误解了:SQS确实启用了重试。

要测试:请尝试以下操作:

$sqsClient = new sqqClient('2012-11-05', ['retries' => 2]);
$startTime = time();
try {
    $sqsClient->receiveMessages(['WaitTimeSeconds' => 5]);
} catch(Exception $e) {
}
$timeTaken = time() - $startTime;
echo $timeTaken;

,并且不发送任何消息。您会看到

10

就是#WaitTime * #retries

如果未收到任何消息,则认为这是失败,将重试以获取一些消息。

S3和DynamoDB有特殊情况-这就是您所注意到的。

编辑:

这有效:入侵AWS代码。

class final class Middleware
{

    public static function retry(
        callable $decider = null,
        callable $delay = null,
                 $stats = false
    ) {

    echo 'Forcing retries to false';
    $decider = function() {return false;};
    ...

这不是:在我的代码中。

$decider = function() {
     echo 'No retries';
     return false;
};
$client->getHandlerList()->appendSign(\AWS\Middleware::retry($decider, null), 'retry');