对于外部有频率限制的接口API请求我这里有三个思路,求指导

发布于 2022-09-07 23:39:13 字数 474 浏览 101 评论 0

假设订单确认收货后推给远程服务器,该接口限制每分钟70次自己想了以下几种方案:

1.每次点击都会请求一次接口,等待结果返回并验证结果,问题:可能会出现超过频率限制,不好验证所有的请求是否成功,请求接口等待时间长。批量请求失败的无法重试。

2.给每个订单加一个请求成功标记,给用户操作埋点比如用户查询订单时,每次用户操作到这里就触发检查一遍上次请求是否成功,有没有成功的继续请求。优点就是对于请求失败的,可以进行重试。但如果用户不操作可能就永远不会再请求。并且频率也不好控制。如果某些原因导致太多没有请求成功的,那么一次请求太多用户等待时间也会莫名其妙变长

3.用一台服务器和Redis做异步服务队列,每次需要请求该接口时直接将请求的参数推给请求队列,再由该服务器专门去处理,好处是容易做频率限制,并且请求失败的可以重试,对用户前台体验上由于异步操作了所以等待时间减少了。

如果是查询的比如是查询该笔订单想的比较简单,就是将数据缓存进redis,设过期时间。这样不用每次查询。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

回心转意 2022-09-14 23:39:13

加一个中间状态吧,订单确认收货后加一个“等待确认”状态,然后推到mq,然后再起一个服务按照70每分钟的速率从mq拿消息推到那个接口,成功了直接该状态,失败了再次推到mq

メ斷腸人バ 2022-09-14 23:39:13

搜一下限流的漏桶算法和令牌算法,具体的就不在这里解释了吧,善用搜索引擎

时光倒影 2022-09-14 23:39:13

没搞懂你想要的是什么功能。是想要接口频率限制,还是想要接口必须调用成功,还是想要什么呢?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文