• 61、springmvc-异步请求-返回DeferredResult


    61、springmvc-异步请求-返回DeferredResult

    61.1 DeferredResult 官方文案

    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

  • 相关阅读:
    IO
    NIO
    Nginx(六)之负载均衡策略
    Nginx(五)之事件相关实现
    Nginx(四)之模块功能
    Nginx(三)之配置指令与内部运行逻辑
    Nginx(二)之数据结构
    Nginx(一)之整体架构框架
    HTTP(二)Web安全
    gson哪些符号html转义,Gson-特殊字符的转义-disableHtmlEscaping()
  • 原文地址:https://www.cnblogs.com/Grand-Jon/p/10089391.html
Copyright © 2020-2023  润新知