веб-сервисы Amazon — понимание логики повторов в AWS PHP SDK

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

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

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

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');
0

Другие решения

Других решений пока нет …