2017-03-13 1 views
2

PHP 용 AWS SDK와 비동기 모드의 AWS Polly를 사용하고 있습니다.PHP 용 AWS SDK : 비동기식 오류를 다시 시도하는 방법은 무엇입니까?

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이 너무 중요주의 마십시오.

이 코드는 정말 중요하지 않다 생각하지만, 여기가 AWS PHP SDK 개발자와 this GitHub issue에서 설명하고있는 바와 같이 어쨌든

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

번호를 유지하려면 ['CommandPool'] (https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/commands.html#command-pool)을 어떻게 사용합니까? 수준의 동시 요청이 있습니까? 반복적으로 스로틀 링을 트리거하는 애플리케이션에서 AWS가 싫증날 수 있습니다. –

+0

@ Michael-sqlbot 안녕하세요, 훌륭한 조언에 감사드립니다. 나는 정확하게 그것을 했으므로 최대 동시성 제한을 설정하는 것을 관리했습니다. 그러나 이것이하는 것은 요금 제한을받을 확률을 낮추지 만 여전히 거부 된 약속을 다시 시도하지는 않습니다. –

+0

솔직히 SDK for PHP 나 PHP Best Practices/Design Pattern에 익숙하지 않습니다 ... 그러나 SDK 소스 코드는 재시도를 약속 한 것으로 처리했는지, 아니면 기대가 맞는지 당신은 그들을 처리 할 것입니다. 아마도 명령 풀로 요청을 보냄으로써 할 수 있습니다. 이것은 재시험에 적합한 어떤 종류의 실패와 관련된 문제 일 수도 있습니다. –

답변

관련 문제