基于 servlet3.0 的异步 请求 同步响应结果之 两种实现 方式

总结:有时候我们异步处理结果,异步处理完成一半都是在处理的那端推送 消息(如 sms,极光或者自定义的推送消息系统)通知用户处理结果,不会立马返回处理后的结果,一般返回 排队中,或者处理中,前端轮询 查询结果

          有时候在想 有没有 异步处理 同步响应结果呢,答案是有的,一般会设置超时时间,避免长时间等待,代码如下:

   例一:    

 /**
     * 延时结果请求 基于发布订阅机制
     * 效果 就是 异步处理 同步返回响应结果
     * @return
     */
    @GetMapping("delayed")
    public DeferredResult get(){
        //处理业务1
        DeferredResult deferredResult = new DeferredResult();
        //监听器处理 业务2
        eventBusService.register(new IntegralEventListener());
        eventBusService.post(deferredResult);
        return deferredResult;
    }
    //监听器
@Subscribe
public void listen(DeferredResult event){ //送积分 try { Thread.sleep(1000); } catch (InterruptedException e) { } event.setResult("ok"); log.info("异步结果响应: "); }

 

 

例二:

  /**
     * 常规callable
     * @return
     * @throws ExecutionException
     * @throws InterruptedException
     */
    @GetMapping("delayedCall")
    public Object getString() throws ExecutionException, InterruptedException {
        Future future = executor.submit(new Callable() {
            //处理业务1
            @Override
            public CommonResult call() throws Exception {
                Thread.sleep(1000);
               return new CommonResult();
            }
        });
        //处理业务2
       return future.get();
    }

 

posted @ 2019-06-14 10:07  川流不息&  阅读(213)  评论(0编辑  收藏  举报