Spring MVC的异步请求ResponseBodyEmitter

Callback和DeferredResult用于返回单个结果,如果有多个结果需要同时返回给客户端时,可以使用ResponseBodyEmitter,每个结果值都有一个HttpMessageConverter。返回值可以直接写他们本身,也可以放在ResponseEntity里面。

<code> @RequestMapping("/anync/emitter")
public ResponseBodyEmitter handTask(){

ResponseBodyEmitter emitter = new ResponseBodyEmitter();
executorService.execute(new Runnable() {
@Override
public void run() {
try {
emitter.send("task1");
emitter.send("task2");
emitter.send("task3");
emitter.complete();
} catch (IOException e) {
e.printStackTrace();
}

}
});
emitter.onCompletion(new Runnable() {
@Override
public void run() {
System.out.println("complet async task");
}
});

emitter.onTimeout(new Runnable() {
@Override
public void run() {
System.out.println("execute task timeout");
}
});
return emitter;
}/<code>

一次请求,同时在异步线程中将task1,task2,task3的执行结果返回给客户端。


分享到:


相關文章: