当前位置: 首页 > 面试题库 >

由于每秒上限而限制和排队API请求

东郭鹤龄
2023-03-14
问题内容

我正在使用mikeal /
request
进行API调用。我最常使用的API之一(Shopify
API)。最近设置了新的通话限制,我看到类似以下错误:

Exceeded 6.0 calls per second for api client. Slow your requests or contact support for higher limits.

我已经进行了升级,但是无论获得多少带宽,我都必须考虑这一点。对Shopify
API的大部分请求都在async.map()函数内,该函数循环异步请求并收集主体。

我正在寻找任何帮助,也许是一个已经存在的库,该库将环绕请求模块,并实际上阻止,睡眠,调节,分配,管理,同时触发的许多同时请求,并将它们限制为6在一个时间。如果没有这样的项目,我没有问题。我只是不知道如何处理这种情况,我希望有某种标准。

我用迈克(要求)订了票。


问题答案:

我遇到了各种API的同一问题。AWS也以节流而闻名。

可以使用两种方法。您提到了async.map()函数。您是否尝试过async.queue()?队列方法应允许您设置固定限制(如6),超过该限制的任何内容都将放入队列中。

另一个有用的工具是oibackoff。如果从服务器返回错误并再次尝试,该库将允许您回退请求。

包装两个库以确保覆盖了您的两个库,这很有用:async.queue确保您没有超出限制,而oibackoff确保如果服务器告诉您,可以再次获得请求有一个错误。



 类似资料:
  • 我正在写一个网络爬虫,运行并行抓取许多不同的域。我想限制每秒向每个域发出的请求数量,但我不关心打开的连接总数,也不关心跨所有域发出的每秒请求总数。我想最大限度地增加打开连接和每秒请求的总数,同时限制对单个域的每秒请求数。 我可以找到的所有现有示例(1)限制打开连接的数量,或(2)限制在fetch循环中每秒发出的请求总数。例子包括: aiohttp:速率限制并行请求 它们都不做我要求的事情,即限制每

  • 我正在使用Guzzle6开发一个Laravel应用程序。很多功能都依赖于API,我已经为其创建了一个包装器。 我的包装器是一个类,它在<code>__construct()。 我使用的API每10秒钟有40个请求的限制。我正在缓存东西,所以很少会达到这个极限,但是我想知道如果达到这个极限,我的应用程序不会就这么死掉! 关于我的应用程序的一些注意事项: 仅当过去 6 小时内未进行相同调用时,才会进行

  • 问题内容: 我在Eclipse中收到以下错误消息: 这是什么意思?在同一主题上还有另一个SO问题,但在这种情况下似乎不适用。我没有创建一个新的Java类,而是尝试使用一个。 问题答案: 猜测您正在使用的另一个库也需要Apache Commons I /O,但是版本不同。拥有一段代码(以传递方式)可以访问同一软件包的两个版本有些棘手。您可能可以安排它,以便您的代码和其他库使用相同的版本。使用CLAS

  • 问题内容: 我试图在不重新创建存根的情况下编译由IBM的WSDL2Java在Java5上创建的Java 1.4代码,并在Eclipse中看到此错误。 我假设生成的存根应该只要运行时可用就可以编译。 jars 完整的班级名称是 javax.xml.namespace.QName 这到底是怎么回事?这是我要用香肠重构猪的情况吗?我最好重新创建存根吗? 问题答案: 还有另一个解决方案,也可以。 1, 转

  • 我有一个表tablename和列col1-col10。不是每行都填充了col4,但每行都填充了col1、col2、col3。我想在col4满足条件时获取所有{col1,col2,col3}元组,然后从TableName中获取与元组{col1,col2,col3}匹配的所有行。 我怎样才能做到这一点?