package com.zdc.mvc.async.controller;
import java.util.UUID;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.async.DeferredResult;
@Controller
public class AsyncDefResultController {
/**
* 若/create方法被调用;/createorder就会立即返回产生的订单
* @return
*/
@ResponseBody
@RequestMapping("/createorder")
public DeferredResult<Object> createOrder(){
DeferredResult<Object> deferredResult = new DeferredResult<Object>((long)10000,"create faile");
//临时保存起来
DeferredResultQueue.save(deferredResult);
return deferredResult;
}
//模拟监听订单的产生
@ResponseBody
@RequestMapping("/create")
public String create(){
//创建订单
String order = UUID.randomUUID().toString();
DeferredResult<Object> deferredResult = DeferredResultQueue.get();
deferredResult.setResult(order);
return "success==》"+order;
}
}
=================================================================================
/**
创建一个消息队列来保存订单和获取订单
**/
package com.zdc.mvc.async.controller;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.ConcurrentLinkedQueue;
import org.springframework.web.context.request.async.DeferredResult;
public class DeferredResultQueue {
//创建一个队列
private static Queue<DeferredResult<Object>> queue = new ConcurrentLinkedQueue<DeferredResult<Object>>();
public static void save(DeferredResult<Object> deferredResult){
//保存
queue.add(deferredResult);
}
//获取方法
public static DeferredResult<Object> get(){
//获取
return queue.poll();
}
}