我需要及时异步处理请求 - 收到请求后,我必须返回状态为200的响应,以确认请求已达到目标,然后继续在服务中发生一些魔术。我尝试了几种方法来达到它,但每次响应都是在逻辑部分以其他线程结束后发送的。
有没有办法使用Spring实现它?或者我应该考虑解决这个问题的其他方法吗?
答案 0 :(得分:2)
Spring Framework提供了异步执行和任务调度的抽象
你可以看看这个=> http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
答案 1 :(得分:0)
您需要使用deferredResult http://docs.spring.io/spring-framework/docs/3.2.0.BUILD-SNAPSHOT/api/org/springframework/web/context/request/async/DeferredResult.html
您将创建一个deferredResult对象,然后您将返回到客户端。然后异步您将执行逻辑,一旦完成,您将通知客户端请求已完成。 这种技术也称为“http long polling”
@RequestMapping("/")
@ResponseBody
public DeferredResult<String> square() throws JMSException {
final DeferredResult<String> deferredResult = new DeferredResult<>();
runInOtherThread(deferredResult);
return deferredResult;
}
private void runInOtherThread(DeferredResult<String> deferredResult) {
//seconds later in other thread...
deferredResult.setResult("HTTP response is: 42");
}