我在异步模式下将 AWS Polly 与适用于 PHP 的 AWS 开发工具包一起使用。
Polly 的速率限制为每秒 80 次,而我希望能够爆发并做更多的事情,如果他们的 API 返回 503 Rate Limiting,我想重试请求(如果低于速率限制,我的脚本可以正常工作) .
文档声明有一个重试选项,但它什么也没做:我将它设置为 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
}