2017-04-06 65 views
5

我有谷歌关于Spring支持Servlet 3.0/3.1规范,大部分信息我在这篇文章中发现: Understanding Callable and Spring DeferredResult有Spring MVC中AsyncContext的模拟(如何写在另一个线程http响应)

这里作者说你可以从控制器返回CallableDefferedResult,并且说它是servlet 3.0/3.1在春天维护。

但我不知道如何在我的处境应用它:

我有外部系统,我从这个系统得到的结果asynchrounously。

在控制器我写的是这样的:

externalSystenm.send(requestId, message); 

,我有另一个线程在那里我得到的结果:

Message m = externalSystem.get(); 
m.getRequestId();// According this id I can map message to request 

我知道,在Servlet API的我允许保存asyncContext在地图和然后找到它。

我怎样在春天实现它?

回答

3

我发现下面的文章: Spring MVC 3.2 Preview: Introducing Servlet 3, Async Support

例如:

@RequestMapping("/quotes") 
@ResponseBody 
public DeferredResult<String> quotes() { 
    DeferredResult<String> deferredResult = new DeferredResult<String>(); 
    // Add deferredResult to a Queue or a Map... 
    return deferredResult; 
} 


// In some other thread... <-- important phrase 
deferredResult.setResult(data); 
// Remove deferredResult from the Queue or Map 
+0

我想你回答了你自己的问题。无论何时从外部系统获取消息,只需将其设置在deferredResult中,并且DeferredResult将在线程之间保持共享。当结果线程将延迟结果的结果正确时,它将作为响应提供。 –

相关问题