使用Scala限制对外部服务的API调用



我有一个服务公开了一个REST端点,经过几次转换后,该端点也通过其REST端点调用第三方服务。

我想在我的服务上实现某种节流,以避免被这个第三方服务节流。请注意,我的服务端点只接受一个请求,而不接受它们的列表。我使用Play,我们也有Akka Streams作为依赖。

我的第一个想法是让我的服务将请求保存到数据库表中,然后使用Akka StreamsSource,利用throttle函数,选择任务,应用转换,然后调用外部服务。

这是一个合理的方法还是有任何严重的缺点?

谢谢!

为什么要将请求保存到数据库?队列是否需要在重新启动后继续运行,和/或您是否运行了需要以某种方式同步请求的负载平衡设置?

如果你不需要以上内容,我认为只使用Source.queue来存储任务数据也可以吗?

也许你已经考虑过了:如果你想让你的端点更有弹性,你应该允许API发送一个"抱歉,繁忙"的响应,并在队列超过一定大小时丢弃请求,而不是排队。

最新更新