当前位置: 首页 > news >正文

Dubbo 2.7.0 CompletableFuture 异步

了解Java中Future演进历史的同学应该知道,Dubbo 2.6.x及之前版本中使用的Future是在java 5中引入的,所以存在以上一些功能设计上的问题,而在java 8中引入的CompletableFuture进一步丰富了Future接口,很好的解决了这些问题。

Dubbo在2.7.0版本已经升级了对Java 8的支持,同时基于CompletableFuture对当前的异步功能进行了增强。

Dubbo 异步调用链路

CompletableFuture 实例

  1. 创建一个CompletableFuture列表,每个CompletableFuture对象代表一个异步调用的结果
  2. CompletableFuture对象定义了执行完成后的操作及异常处理
  3. 使用CompletableFuture.allOf()方法将这个CompletableFuture列表组合成一个新的CompletableFuture对象
  4. join()方法会阻塞当前线程,直到对应的异步调用完成并返回结果
List<Point> resultList = Lists.newCopyOnWriteArrayList();
CompletableFuture.allOf(Lists.partition(uidList, limit).stream().map(subUidList -> {return pointClient.batchGetPoint(new BatchPointReq(subUidList)).whenComplete((res, thr) -> {if (thr != null) {logger.warn("batchGetPoint fail, req: {}", req, thr);} else if (res.isSuccess()) {resultList.addAll(res.getPointList());}});
}).toArray(CompletableFuture[]::new)).join();
// 亦可在总CompletableFuture使用`thenApply()`合并结果
return resultList;

非Dubbo接口的异步化 CompletableFuture.supplyAsync(() -> pointClient.batchGetPoint(new BatchPointReq(subUidList)), threadPool)


参考资料:

  1. Dubbo异步化实践
  2. 如何基于Dubbo实现全异步调用链
  3. Java 并发编程 Future及CompletionService
  4. 20个使用 Java CompletableFuture的例子
http://www.lryc.cn/news/121070.html

相关文章:

  • pytest-xdist分布式测试原理浅析
  • 研发工程师玩转Kubernetes——PVC通过storageClassName进行延迟绑定
  • 6.利用matlab完成 符号矩阵的秩和 符号方阵的逆矩阵和行列式 (matlab程序)
  • python获取类名__qualname__,解决django接口ObjectDoesNotExist异常寻找model的问题
  • 电流的测量(分流电流表)
  • Leetcode每日一题:23. 合并 K 个升序链表(2023.8.12 C++)
  • 越南的区块链和NFT市场调研
  • MySQL常用语句
  • Mongodb:业务应用(1)
  • 【vue】vue中按钮权限控制:
  • 【博客695】k8s subPathExpr作用
  • 微信小程序中键盘弹起输入框自动跳到键盘上方处理
  • excel将主信息和明细信息整理为多对多(每隔几行空白如何填充)
  • 卷积神经网络实现彩色图像分类 - P2
  • 【博客694】k8s kubelet 状态更新机制
  • 【博客692】grafana如何解决step动态变化时可能出现range duration小于step
  • eNSP:ibgp的破水平切割练习
  • maven是什么?安装+配置
  • 基于长短期神经网络LSTM的多分类代码
  • 利用爬虫爬取图片并保存
  • 设计模式之Bridge模式的C++实现
  • springboot异步任务
  • Flutter父宽度自适应子控件的宽度
  • 什么是 API 安全?学习如何防止攻击和保护数据
  • 简述 TCP 和 UDP 的区别以及优缺点和使用场景?
  • react进阶
  • 使用windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】
  • 科技感响应式管理系统后台登录页ui设计html模板
  • Lombok的使用及注解含义
  • 实时通信应用的开发:Vue.js、Spring Boot 和 WebSocket 整合实践