【问题标题】:PHp AWS S3 SDK retry on network connections errorsPHP AWS S3 SDK 重试网络连接错误
【发布时间】:2017-04-30 08:31:42
【问题描述】:

我正在使用适用于 PHP 的 AWS SDK V3。有时,当我调用 AWS S3 时,由于网络问题,即使我尝试与之交互的对象在那里,我也会收到诸如 400 错误Bad Request RequestTimeout (client): Your socket connection to the server was not read from or written to within the timeout period 之类的错误。我需要做的是实现一个重试机制。我想知道我们是否可以简单地使用 AWS 开发工具包中的一个选项来指定我们希望在发生错误后重试的次数。 我知道我可以通过简单的 try catch 和 retry 来做到这一点,但我认为 SDK 可能已经提供了一种更简洁的方法来做到这一点。 我已经找到了静态函数Middleware::retry(),但我不知道如何使用它。

【问题讨论】:

    标签: php http amazon-web-services curl amazon-s3


    【解决方案1】:

    您可以在构造任何 AWS 服务客户端类的新实例时指定重试次数:

    $client = new Aws\EC2\Ec2Client([
        'region'  => 'eu-central-1',
        'retries' => 3
    ]);
    

    https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/configuration.html#retries

    【讨论】:

    • 我检查了文档,发现已经有一个默认的重试次数3。但是我如何指定睡眠时间(重试前的延迟),因为它似乎立即重试并且它没有给服务返回时间。我像retries一样使用了delay选项,但它似乎没有生效。
    • 我添加了配置参数 'http'=>['delay'=> 5000] 。我认为这将是两次重试之间的延迟时间,但它最终是执行整个 HTTP 请求的时间,即使没有连接问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2020-07-08
    相关资源
    最近更新 更多