веб-сервисы Amazon — AWS SDK для PHP: как повторить асинхронные сбои?

Я использую AWS Polly с AWS SDK для PHP в асинхронном режиме.

Полли имеет ограничение скорости 80 в секунду, в то время как я хочу иметь возможность выполнять пакетную обработку и делать больше, и в случае, если их API возвращает 503 Ограничение скорости, я хочу повторить запрос (мой сценарий работает нормально, если скорость ограничена) ,

Документы утверждают, что есть опция повторов, но это ничего не делает: не имеет значения, если я установлю его на 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
}

2

Решение

Как обсуждено в этот вопрос GitHub с разработчиком 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.

0

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

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