【问题标题】:AWS SDK for PHP: how to retry asynchronous failures?适用于 PHP 的 AWS 开发工具包:如何​​重试异步失败?
【发布时间】:2017-08-02 23:33:00
【问题描述】:

我在异步模式下将 AWS Polly 与适用于 PHP 的 AWS 开发工具包一起使用。

Polly 的速率限制为每秒 80 次,而我希望能够爆发并做更多的事情,如果他们的 API 返回 503 Rate Limiting,我想重试请求(如果低于速率限制)。

文档声明有一个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
}

【问题讨论】:

  • 如何使用CommandPool 将同时请求的数量保持在正常水平? AWS 可能不赞成反复触发限制的应用程序。
  • @Michael-sqlbot 嘿,感谢您的精彩建议。我正是这样做的,因此设法设置了最大并发限制。但是,这样做会降低速率受限的可能性,但它仍然不允许我重试被拒绝的承诺。
  • 老实说,我对 PHP 的 SDK 或 PHP 最佳实践/设计模式不太熟悉...但是 SDK 源代码应该让您了解它是否旨在处理重试承诺,或者如果期望你会处理它们(也许通过将请求发送回命令池,我假设它会一直持续到它用完可做的事情)。这也可能是关于哪些类型的失败有资格重试的问题。

标签: php amazon-web-services guzzle amazon-polly


【解决方案1】:

正如 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 对其进行调度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多