我在异步模式下使用AWS Polly和AWS SDK for PHP。
Polly的速率限制为每秒80,而我希望能够突发并做更多,如果他们的API返回503速率限制,我想重试请求(我的脚本工作正常,如果在限速)。
文档声明有一个retries option,但它什么也没做:如果我将它设置为0或1000并不重要,它似乎没有重试,我从SDK中得到了拒绝的承诺。也许它只适用于同步请求?
$polly = new PollyClient($config);
// $config
array (size=4)
'version' => string 'latest' (length=6)
'credentials' =>
array (size=2)
'key' => string 'xxx' (length=20)
'secret' => string 'xxx' (length=40)
'region' => string 'eu-west-1' (length=9)
'retries' => int 1000
请注意,按正确顺序unwrap
返回的承诺也很重要(例如,回复应与请求的顺序相同)。
我认为这段代码并不重要,但无论如何它都是
foreach ($textChunks as $textChunk) {
try {
$promise = $promises[] = $polly->synthesizeSpeechAsync([
'OutputFormat' => 'mp3',
'Text' => $textChunk,
'TextType' => 'text',
'VoiceId' => 'Amy',
]);
$promise->then(
function() use () {
// resolved
},
function() {
// rejected
}
);
} catch (PollyException $e) {
// log
}
}
try {
$results = GuzzleHttp\Promise\unwrap($promises);
} catch (Throwable $e) {
// log
}
答案 0 :(得分:0)
正如this GitHub issue与AWS PHP SDK开发人员所讨论的那样:
https://github.com/aws/aws-sdk-php/issues/1214#issuecomment-292002487
如果失败,则会自动重试所有异步请求。
https://github.com/aws/aws-sdk-php/issues/1214#issuecomment-301609123
PHP SDK将使用multi_curl发送异步请求。当前一次失败时会重试一个新请求,因此订单会被保留,直到使用multi_curl进行调度。