无期货创建可扩展的解决方案?

时间:2016-04-22 06:34:36

标签: scala spring-mvc concurrency feign

探索HTTP客户端活页夹Feign,我看到它是does not support回调结果(DeferredResults)。那么我将如何处理创建可扩展端点以并行执行许多时间密集型任务?试图避免这样的事情:

    DrawerLayout drawer = (DrawerLayout)      getActivity().findViewById(R.id.drawer_layout);
    drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

1 个答案:

答案 0 :(得分:1)

我是否理解这一点:'def endpoint'是一种同步阻塞方法,你不能改变这个事实,因为它是由框架决定的?

现在,这意味着您必须阻止等待计算/ 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()
    }
}