【问题标题】:Throttle API calls to external service using Scala使用 Scala 限制对外部服务的 API 调用
【发布时间】:2023-12-27 00:25:01
【问题描述】:
我有一个服务公开一个 REST 端点,经过几次转换后,它也通过其 REST 端点调用第三方服务。
我想对我的服务实施某种限制,以避免被此第三方服务限制。请注意,我的服务端点只接受一个请求,而不是它们的列表。我正在使用 Play,我们也有 Akka Streams 作为依赖项。
我的第一个想法是让我的服务将请求保存到数据库表中,然后使用 Akka Streams Source,利用 throttle 函数,选择任务,应用转换,然后调用外部服务。
这是一种合理的方法还是有任何严重的缺点?
谢谢!
【问题讨论】:
标签:
scala
playframework
akka-stream
【解决方案1】:
为什么要将请求保存到数据库?队列是否需要在重新启动后继续存在和/或您是否运行需要以某种方式同步请求的负载平衡设置?
如果您不需要上述内容,我认为仅使用 Source.queue 来存储任务数据也可以吗?
也许你已经想到了:如果你想让你的端点更有弹性,你应该允许你的 API 发送一个“抱歉,忙”的响应,并在你的队列增长到超过一定大小时丢弃请求而不是排队.
【讨论】:
-
正如你所指出的,我真的不需要数据库。我已经想到了Source.queue,但是从this example 我无法弄清楚我的控制器将如何告诉它的服务来排队一个要处理的新元素。