Ich verwende AWS Polly mit AWS SDK für PHP im asynchronen Modus.AWS SDK für PHP: Wie wiederhole ich asynchrone Fehler?
Polly hat eine Geschwindigkeitsbegrenzung von 80 pro Sekunde, während ich möchte Burst und mehr tun, und wenn ihre API 503 Rate Limiting zurückgibt, möchte ich die Anfrage wiederholen (mein Skript funktioniert gut, wenn Untergrenze).
Die Dokumentation gibt es eine retries option, aber es tut nichts: es spielt keine Rolle, wenn ich es auf 0 oder 1000, scheint es nicht zu wiederholen und ich bekomme abgelehnte Versprechen vom SDK. Vielleicht ist es nur gut für synchrone Anfrage?
$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
Sie beachten Sie, dass unwrap
die zurück Versprechen in der richtigen Reihenfolge ist wichtig ing zu (zum Beispiel Antworten in der gleichen Reihenfolge wie Anfragen sein sollen).
Ich nehme an diesem Code ist nicht wirklich wichtig, aber hier ist es trotzdem
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
}
Was ist mit der Verwendung von ['CommandPool'] (https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/commands.html#command-pool), um die Nummer zu behalten von gleichzeitigen Anfragen auf eine vernünftige Ebene? AWS missbilligt möglicherweise Anwendungen, die wiederholt eine Drosselung auslösen. –
@ Michael-sqlbot Hey, danke für den tollen Rat. Ich habe genau das gemacht und daher das maximale Limit für den gemeinsamen Zugriff festgelegt. Was dies jedoch bewirkt, verringert die Wahrscheinlichkeit, dass die Rate begrenzt wird, aber es lässt mich immer noch nicht abgelehnte Versprechungen wiederholen. –
Ich bin ehrlich gesagt nicht so vertraut mit dem SDK für PHP, oder PHP Best Practices/Design Patterns im Allgemeinen ... aber der SDK-Quellcode sollte Ihnen eine Idee geben, wenn es mit Versprechungen behandelt wird oder wenn die Erwartung ist Sie würden mit ihnen umgehen (vielleicht, indem Sie die Anfrage zurück an den Befehlspool senden, von dem ich anmaße, dass er so lange läuft, bis es keine neuen Aufgaben mehr gibt). Es könnte auch sein, dass dies ein Problem ist mit welchen Arten von Fehlern für Wiederholungen geeignet sind. –