对于外部有频率限制的接口API请求我这里有三个思路,求指导
假设订单确认收货后推给远程服务器,该接口限制每分钟70次自己想了以下几种方案:
1.每次点击都会请求一次接口,等待结果返回并验证结果,问题:可能会出现超过频率限制,不好验证所有的请求是否成功,请求接口等待时间长。批量请求失败的无法重试。
2.给每个订单加一个请求成功标记,给用户操作埋点比如用户查询订单时,每次用户操作到这里就触发检查一遍上次请求是否成功,有没有成功的继续请求。优点就是对于请求失败的,可以进行重试。但如果用户不操作可能就永远不会再请求。并且频率也不好控制。如果某些原因导致太多没有请求成功的,那么一次请求太多用户等待时间也会莫名其妙变长
3.用一台服务器和Redis做异步服务队列,每次需要请求该接口时直接将请求的参数推给请求队列,再由该服务器专门去处理,好处是容易做频率限制,并且请求失败的可以重试,对用户前台体验上由于异步操作了所以等待时间减少了。
如果是查询的比如是查询该笔订单想的比较简单,就是将数据缓存进redis,设过期时间。这样不用每次查询。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
加一个中间状态吧,订单确认收货后加一个“等待确认”状态,然后推到mq,然后再起一个服务按照70每分钟的速率从mq拿消息推到那个接口,成功了直接该状态,失败了再次推到mq
搜一下限流的漏桶算法和令牌算法,具体的就不在这里解释了吧,善用搜索引擎
没搞懂你想要的是什么功能。是想要接口频率限制,还是想要接口必须调用成功,还是想要什么呢?