微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有速率和并发限制的 ExecutionContext

如何解决具有速率和并发限制的 ExecutionContext

假设我有一个简单的 HTTP 客户端,有一个像这样的简单方法

def httpGet(url: String)(implicit ec: ExecutionContext): Future[String] = Future {
  io.source.fromURL(url).mkString
}

假设我还针对具有速率和并发限制的服务器调用它。我认为这些限制应该在 ExecutionContext 中实施。

并发限制只是支持某些 java.util.concurrent.ExecutorExecutionContext 的线程数。速率限制也应该是 ExecutionContext 的一部分。因此,我们可以编写一个扩展 ExecutionContext 的新类来实现速率和并发限制,并使用此类的实例来调用 httpGet

class ExecutionContextWithRateAndConcurrencyLimits(
  numThreads: Int,// for concurrency limit
  rate: Rate       // requests per time unit
) extends ExecutionContex { ... }


val ec = new ExecutionContextWithRateAndConcurrencyLimits(
  numThreads = 100,rate = Rate(1000,1.sec)
)

val fut = httpGet(url)(ec)

您是否同意在 ExcecutionContext 中实施速率和并发限制?你知道这样的实现吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。