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的執行結果返回給客戶端。