似乎只有DynamoDB和S3Clients有retry logic enabled。
似乎retries
配置值对其他服务没有影响。是否有一种简单的方法可以在其他方面启用此功能(例如SQS),或者我是否误解了此功能?
我在Java SDK中找到了clientConfig.setUseThrottleRetries(true);
option,但还没有找到PHP SDK中的等价物。
答案 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');