栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

webAsyncTask异步请求应用场景

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

webAsyncTask异步请求应用场景

场景:图片是上传到腾讯云cos,上传后需要经过腾讯云的审核,审核后才能获取上传结果,主线程等待结果会占用大量的系统资源,如何优化?

解决方案:通过异步请求来处理,所谓异步请求,就是在当前线程调用之后直接返回,继续处理其余任务,当前调用处理成功之后再经过一个回调线程来处理返回结果。

我们通过实现Callable接口的call方法来定义Web请求返回结果的任务,并通过WebAsyncTask来执行任务,当调用任务以后立即返回,即可并行执行其他任务,最终当webAsyncTask执行完成以后,Web请求获得返回。

代码:

    @ResponseBody
    public WebAsyncTask fs_out_files_upload(HttpServletRequest request) throws Exception {
        RespDTO baseRespDTO = RespDTO.getInstance(null);
        MultipartFile fileList = ((MultipartHttpServletRequest) request).getFile("file");
        log.info("外部线程:" + Thread.currentThread().getName());
        Callable result = () -> {
            String requestId= IdUtil.fastSimpleUUID();
            MDC.put("requestId", requestId);
            log.info("内部线程:" + Thread.currentThread().getName());
            try {
                return commonFileService.fsOutFilesUpload(fileList);
            } catch (Exception e) {
                log.error("上传文件文件异常", e);

            }
            log.info("内部线程返回:" + Thread.currentThread().getName());
            baseRespDTO.setMsg("处理失败");
            return baseRespDTO;
        };
        WebAsyncTask wat = new WebAsyncTask(5000L, result);
        wat.onTimeout(() -> {
            log.error("文件上传超时,内部线程:" + Thread.currentThread().getName());
            baseRespDTO.setMsg("处理失败,超时");
            baseRespDTO.setSubMsg("文件上传失败");
            return baseRespDTO;
        });

        wat.onError(() -> {
            // 错误回调
            log.error("文件上传发生错误,内部线程:" + Thread.currentThread().getName());
            baseRespDTO.setMsg("处理失败,上传出错");
            baseRespDTO.setSubMsg("文件上传失败");
            return baseRespDTO;
        });
        return wat;
    }

}

参考:实战Spring Boot 2.0系列(四) - 使用WebAsyncTask处理异步任务_零壹技术栈的博客-CSDN博客_webasynctask

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/966570.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号