Понимание логики повторных попыток в AWS PHP SDK

Кажется, что только DynamoDB и S3Clients имеют логика повторных попыток включена.

Похоже, что значение конфигурации retries не влияет на другие службы. Есть ли простой способ включить это на других (например, SQS), или я неправильно понял эту функцию?

Я нашел параметр clientConfig.setUseThrottleRetries(true); в Java SDK, но еще не нашел эквивалента в PHP SDK.


person Jonathan    schedule 01.04.2018    source источник


Ответы (1)


Вы неправильно поняли: в 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');
person Robbie    schedule 07.07.2018