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

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

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

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

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');
Другие вопросы по тегам