Кажется, что только у DynamoDB и S3Clients есть логика повтора включена.
Кажется, что retries
Значение config не влияет на другие сервисы. Есть ли простой способ включить это на других (например, SQS), или я неправильно понял эту функцию?
Я нашел clientConfig.setUseThrottleRetries(true);
вариант в Java SDK, но еще предстоит найти эквивалент в PHP SDK.
Вы неправильно поняли: в 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');
Других решений пока нет …