如何解决具有速率和并发限制的 ExecutionContext
假设我有一个简单的 HTTP 客户端,有一个像这样的简单方法:
def httpGet(url: String)(implicit ec: ExecutionContext): Future[String] = Future {
io.source.fromURL(url).mkString
}
假设我还针对具有速率和并发限制的服务器调用它。我认为这些限制应该在 ExecutionContext
中实施。
并发限制只是支持某些 java.util.concurrent.Executor
的 ExecutionContext
的线程数。速率限制也应该是 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 举报,一经查实,本站将立刻删除。