gpt4 book ai didi

php - 有限制地排队 Guzzle 请求

转载 作者:IT王子 更新时间:2023-10-29 00:13:27 26 4
gpt4 key购买 nike

我正在使用 Guzzle 6 开发 Laravel 应用程序。很多功能都依赖于 API,我已经为其创建了一个包装器。

我的包装器是一个单独的类,它在 __construct() 中创建 Guzzle 客户端,并具有各种返回 Guzzle 请求响应的公共(public)函数。

我使用的 API 限制为每 10 秒 40 个请求。我正在缓存东西,所以很少会达到这个限制,但我想知道如果达到了我的应用程序不会死掉!

关于我的应用的一些说明:

  • 只有在过去 6 小时内没有进行过相同的调用时,才会进行 API 调用。如果有,则永远不会进行调用,直接从我的 Redis 缓存提供响应。
  • 在大多数情况下,API 调用是通过用户操作进行的。应用程序本身永远不会接近达到这些限制。
  • 在大多数情况下,我已经拥有向用户显示请求页面所需的数据。可能会在后台执行 API 调用以查看我这边是否需要更新任何内容,但如果我已经拥有数据并且 API 请求失败,这不会使页面变得无用。
  • 应用已上线,https://likethis.tv如果你想看的话。我正在使用 TMDb API。

那么,我的问题是,我应该如何确保没有达到此限制?我的一些想法如下:

  • 使用 Laravel 队列系统将 Guzzle 请求放入队列中,并且仅在我们仍有请求时才处理它们。如果没有,请等到 10 秒冷却时间过去...
  • 直接为 Guzzle 使用 HandlerStack。不确定这是否可行,但我之前使用过 HandlerStack 来缓存响应。

我尽量不引起过于自以为是的回应,但我确信可能有比上述方法更好和/或更简单的方法,或者如果它们是好主意,任何指示或建议都会很棒。

提前致谢。

最佳答案

  1. 使用 Jobs 包装您的 API 调用并将它们推送到单独的队列:

    ApiJob::dispatch()->onQueue('api');
  2. 使用 mxl/laravel-queue-rate-limit包(我是作者)到速率限制 api 队列。将此添加到 config/queue.php:

    'rateLimit' => [
    'api' => [
    'allows' => 40,
    'every' => 10
    ]
    ]
  3. 运行队列 worker :

    $ php artisan queue:work --queue api

另见 this answer .

关于php - 有限制地排队 Guzzle 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44092240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com