探索 HTTP 客户端绑定器 Feign,我发现它不支持回调结果 (DeferredResults)。那么我将如何处理创建一个可扩展的端点以并行执行许多时间密集型任务?试图避免这样的事情:
val slowComputation : Future[Array[Bytes] = ???
def endpoint = {
Await.result(slowComputation(), Duration(1, SECONDS))
}
探索 HTTP 客户端绑定器 Feign,我发现它不支持回调结果 (DeferredResults)。那么我将如何处理创建一个可扩展的端点以并行执行许多时间密集型任务?试图避免这样的事情:
val slowComputation : Future[Array[Bytes] = ???
def endpoint = {
Await.result(slowComputation(), Duration(1, SECONDS))
}
我是否正确理解这一点:“def 端点”是一种同步阻塞方法,您无法改变这一事实,因为它是由框架决定的?
现在,这意味着您必须在那里等待计算/ IO 返回给您。这也意味着你在那里使用一个线程。
我认为您可以做到最好,以防止该端点因许多等待线程而“过载”。所以:
val waiting = new AtomicInteger(0) val maxThreadsWaiting = 200 def endpoint() ={ try{ val numberThreadsWaiting = waiting.incrementAndGet() if(numberThreadsWaiting > maxThreadsWaiting) { // Return 'overload' failure. Like HTTP 503 } else{ Await.result(slowComputation(), Duration(1, SECONDS)) } } finally { waiting.decrementAndGet() } }