异步编排

异步编排

最近在做公司的会议模块的时候为了性能和用户体验上达到一个可观的效果,在项目中用到了异步编排技术,以此文章作为记录写一篇记录性文章。

背景:

在一次会议请求中要获取如下
1获取本月会议统计

2获取会议列表

3获取当前用户会议待办

4获取当前用户所在部门会议库

5获取当前用户所在部门的议题库

分析:分析发现 以上的每一步都不依赖于其它步骤,如按照传统 串行化开发 (假设:每一个查询需要一秒)那么执行完所有查询至少需要5秒。这样的响应时间是不可以被用户所接受的。

解决思路:因为每一部都不互相依赖 所以直接用异步编排即可

实现过程:

1.用Future和java 8的CompletableFuture
此类的具体要用可自行搜索

一丶
首先定义一个线程池,改线程池用于执行每一个任务(我习惯用Spring的线程工具)

//配置线程池
@Bean(value = "taskThreadPool")
    public ThreadPoolTaskExecutor getThreadPoolTaskExecutor()
    {

        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setCorePoolSize(5);
        return threadPoolTaskExecutor;
    }

二,
使用CompletableFuture编排任务(将获取到的数据全部整合 返回)

	@RequestMapping({"mainJson"})
    @ResponseBody
    public JSONObject mainJson(HttpServletRequest request, HttpServletResponse reponse) throws ExecutionException, InterruptedException {
    	//存放结果
        JSONObject result = new JSONObject();
        //启用异步编排
        //1获取本月会议统计
        CompletableFuture future1 = CompletableFuture.supplyAsync(()->{
        //获取本月会议统计业务代码
            },taskExecutor);
        //2获取会议列表
        CompletableFuture future2 = CompletableFuture.supplyAsync(()->{
        //获取会议列表业务代码
            },taskExecutor);
            //3获取当前用户会议待办
        CompletableFuture future3 = CompletableFuture.supplyAsync(()->{
            //获取当前用户会议待办代码
            },taskExecutor);
        //4获取当前用户所在部门会议库
        CompletableFuture future4 = CompletableFuture.supplyAsync(()->{
            //获取当前用户所在部门会议库代码
            },taskExecutor);
        //5获取当前用户所在部门的议题库
        CompletableFuture future5 = CompletableFuture.supplyAsync(()->{
           //获取当前用户所在部门的议题库代码
            },taskExecutor);
        //结果整合
        result.put("summaryInfo",future1.get());
        result.put("meetToDoList", future2.get());
        result.put("meetTaskList", future3.get());
        result.put("meetInfoList", future4.get());
        result.put("issueLibraryList", future5.get());
        return result;
        }

类似于上面这样就可以异步的完成所有数据 提高运行效率。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值