是否在Undertow工作线程中处理长时间运行的任务?

时间:2016-04-18 20:05:17

标签: spring-boot undertow

我有一个@RestController的Spring Boot应用程序,我使用Undertow作为嵌入式服务器。现在,据我所知,Undertow使用两个线程池:一个处理传入请求的IO线程池和一个委托阻塞任务的工作线程池。正如已经回答here一样,Spring控制器方法在其中一个工作线程上调用。但是,控制器方法中的逻辑可能需要一些时间才能完成。所以我考虑通过从控制器方法返回Callable来使用Spring对异步请求处理的支持。例如:

@RestController
public class MyController {

  @RequestMapping(path = "/myPath", method = RequestMethod.GET)
  @ResponseStatus(HttpStatus.OK)
  public Callable<MyResult> handle() {

    // This part is handled by the Undertow worker thread
    doSomething();

    return () -> {
      // This part is handed off to a thread managed by Spring
      return doSomeLongerProcessing();
    };
  }
}

我现在的问题是:你真的会使用额外的线程池来处理运行时间更长的任务吗?或者最好的做法是让所有东西都在Undertow工作线程中运行?据我所知,这正是工作人员的用途,对吗?

0 个答案:

没有答案