61、springmvc-异步请求-返回DeferredResult
61.1 DeferredResult 官方文案
![1221855-20181219155558576-1203385759.png](https://i-blog.csdnimg.cn/blog_migrate/679f3b1253cd218715c1f187069a3b90.png)
![1221855-20181219160748040-207840087.png](https://i-blog.csdnimg.cn/blog_migrate/60e41176a8c087b3f61aba86a8207e2e.png)
61.2 使用
/**
* 创建订单加入 订单处理队列
*
* @return
*/
@ResponseBody
@RequestMapping("/createOrder")
public DeferredResult<Object> createOrder() {
// 超时间 10秒钟
DeferredResult<Object> deferredResult = new DeferredResult<Object>(10 * 1000L, "create order error");
DeferredResultQueue.save(deferredResult);
return deferredResult;
}
/**
* 另外一个线程 从队列中读取 订单任务 开始创建 ,并返回结果
*
* @return
*/
@ResponseBody
@RequestMapping("/create")
public String create() {
String uuid = UUID.randomUUID().toString();
DeferredResult deferredResult = DeferredResultQueue.get();
deferredResult.setResult(uuid);
return "success===>>>> " + uuid;
}
- 创建一个
DeferredResultQueue
队列
public class DeferredResultQueue {
private static Queue<DeferredResult<Object>> queue = new ConcurrentLinkedQueue<DeferredResult<Object>>();
public static void save(DeferredResult<Object> object) {
queue.add(object);
}
public static DeferredResult<Object> get() {
return queue.poll();
}
}
- 在10秒 超时之前 调用 /create 和 /createOrder 返回结果一直
- 如果超时 返回 create order error