速率限制请求和 Amazon SQS

2024-06-23

我有一个关于如何减慢 api 请求的问题。对于我点击的特定第三方 API,我可以每 2 秒发出 3 个请求。如果我超过了这个数字,我就会被退回status code 429以及以毫秒为单位的等待时间。

这个 api 经常被调用,是我自己的服务器收到不受速率限制的传入请求的直接结果。

由于我不需要同步处理第三方 api 请求,因此我决定将工作卸载到 AWS 上的弹性 beanstalk 工作框,默认情况下从 Amazon SQS 读取。

因此,如果从第三方 api 返回状态代码 429,我的工作人员会将 SQS 消息扔回队列中。这不可避免地会使 api 调用在达到等待时间时起作用。然而,这似乎是一个糟糕的解决方案

有没有办法告诉工作盒上的守护进程将消息留在队列中等待分配的等待时间?或者我可以设置守护进程从队列中读取的速率吗?我正在寻找一种正确的方法(特定于实现)来使用 AWS 上的工作线程和队列进行速率限制。十分感谢你的帮助!

编辑: 我本以为可以在 AWS 上修改一些配置来执行我所要求的操作,但无论哪种方式,我都在为我描述的设置寻找特定的解决方案。我不太确定如何修改或控制弹性豆茎工作盒上的守护进程。


据我了解,您有很多调用第三方服务的触发器,并且您需要对 API 调用进行速率限制。

最好的方法是限制从 SQS 读取的守护进程的速率。根据编写守护程序所用的语言,您应该能够轻松找到可以重用的速率限制器库。例如,Java 和 Python 都有经过良好测试的库here https://github.com/google/guava/blob/master/guava/src/com/google/common/util/concurrent/RateLimiter.java and here https://pypi.python.org/pypi/ratelimit/1.1.0分别。

请记住,这些库将允许每个工作线程每秒 X 个请求。如果您运行一个守护进程,则 X 将是 1.5,适合您的用例。如果您有两个守护进程(例如,两台不同的机器上各有一个),X 应为 0.75

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

速率限制请求和 Amazon SQS 的相关文章

随机推荐

  • 在 React Native Android ViewManager 中暴露 Fragment

    我正在尝试将 YouTube Android API 包装为 React Native 的 UI 组件 我已经成功完成了 Android 配置 获得 onInitializationSuccess 但是我无法弄清楚如何将 YouTubePl
  • Spring中无法使用Tomcat提供的JNDI DataSource?

    我想在基于 Spring 的应用程序中使用 Tomcat 提供的 JNDI 数据源 我使用 Tomcat 7 池 尝试按照描述进行配置here https stackoverflow com questions 9183321 how to
  • 将打字稿字符串转换为布尔值

    我正在尝试将字符串转换为布尔值 有几种方法可以做到这一点 一种方法是 let input true let boolVar input true 这里的问题是我必须验证输入是否正确 除了验证第一个输入然后进行转换之外 还有其他更优雅的方法吗
  • 使用 Firebase 跟踪应用链接

    我们有 Android 和 iOS 应用程序 我们想要跟踪我们的应用程序是从哪些链接下载的 因此 如果我们在 Facebook 上发布了我们应用程序的链接 并且有人点击该链接并下载了它 它应该记录该应用程序是在 Facebook 上下载的
  • 如何选择 Windows 窗体文本框中的所有文本?

    我想选择文本框中的所有文本 我已经使用下面的代码尝试过 textBoxResults SelectionStart 0 textBoxResults SelectionLength textBoxResults Text Length 来源
  • MySql 意外停止

    MySql 意外停止 这是错误日志的副本 2019 07 03 13 27 50 0 错误 InnoDB 您的数据库可能已损坏或 您可能复制了 InnoDB 表空间 但没有复制 InnoDB 日志 文件 请参阅https mariadb c
  • 如何连接 GWT 超链接点击处理程序?

    我是 GWT 的新手 正在努力实现以下目标 这是我编写的代码 public class MyWebApp implements EntryPoint The main container for everything the user se
  • 如何将express.js服务器部署到Netlify

    我正在尝试将 Vue js Node Express MongoDB MEVN 堆栈应用程序部署到 Netlify 我成功地将应用程序的前端部署到 Netlify 现在正在尝试基于以下内容部署 Express 服务器serverless h
  • Django admin - 使所有字段只读

    我试图将所有字段设置为只读 而不明确列出它们 就像是 class CustomAdmin admin ModelAdmin def get readonly fields self request obj None if request u
  • Guava:如何结合过滤和转换?

    我有一个字符串集合 我想将其转换为全部为空或 null 的字符串集合 删除字符串并修剪所有其他字符串 我可以分两步完成 final List
  • 同一日志行上的 Java EE 重复信息

    我想将 log4j2 版本 2 17 1 与 wildfly 15 一起使用 我做了所有写的here http www mastertheboss com jbossas jboss log how to use log4j2 in you
  • Windows 8.1 如何修复这个过时的代码?

    我已将我的项目从 Windows 8 0 升级到 Windows 8 1 并收到一些过时代码的警告 其中一些我已经修复了 有些还没有 这是我无法修复且找不到任何信息的最后警告的图像 所有警告都引用相同的方法 并且它说它已过时 我应该怎么做才
  • 共享托管环境中的 sys_get_temp_dir

    注意 这也适合超级用户 我正在使用 apache2 mpm itk 和 open basedir 在共享主机上设置 PHP 5 3 10 每个用户都不能看到或更改另一个用户的文件 在 apache2 vhost 设置中 我添加了适当的条目来
  • Java - 获取当前类名?

    我想做的就是获取当前的类名 而java附加了无用的废话 1到我的班级名称的末尾 我怎样才能摆脱它并只返回实际的类名 String className this getClass getName Try String className th
  • 我是否必须在 CComPtr 对象上调用 Release() 方法?

    我正在使用 SAPI5 API 来处理文本到语音 如果我简化我的代码 如下所示 我删除了错误检查以尽可能简化它 int main CoInitialize NULL CComPtr
  • 如何使用自动高度获取标签的实际高度

    我知道这个问题以前以各种形式出现过 但没有一个解决方案适合我 我正在使用 Titanium API 2 1 3 并为 iPhone 构建 我使用了很多常见的JS 所以我有这个 exports Header function title va
  • 窗口函数和 group by 子句如何交互?

    我明白窗函数 http www postgresql org docs 9 2 static tutorial window html and group by http www postgresql org docs 8 0 static
  • 生产环境缺少密钥库

    我的情况很像SemiFixed 生产 环境缺少 secret key base https stackoverflow com questions 23501329 semifixed missing secret key base for
  • 如果 json 有多个数据集,我该如何编写 json 模式

    我是这个 json 模式的新手 如果它只有一个数据集 我可以编写 json 模式 如下所示 employees id 1 name aaa 示例 json schema 是 type object required employees pr
  • 速率限制请求和 Amazon SQS

    我有一个关于如何减慢 api 请求的问题 对于我点击的特定第三方 API 我可以每 2 秒发出 3 个请求 如果我超过了这个数字 我就会被退回status code 429以及以毫秒为单位的等待时间 这个 api 经常被调用 是我自己的服务