工作中你可能会遇到很多这样的场景,一个接口,要从其他几个service调用查询方法,分别获取到需要的值之后再封装数据返回。
还可能在微服务中遇到类似的情况,某个服务的接口,要使用好几次feign去调用其他服务的方法获取数据,最后拿到想要的值并封装返回给前端。
这样的场景下,当某个或多个rpc调用的方法比较耗时,整个接口的响应就会非常慢。Java8之后,有一个工具非常适合处理这种场景,就是CompletableFuture。
场景本章主要讲解CompletableFuture的并行处理用法,来针对这种很常见的场景,帮助大家快速掌握并应用到实际工作当中。CompletableFuture内部的用法还有许多,但个人用到的场景大多都是并行处理,对其他场景感兴趣的小伙伴可以另行百度搜索。
场景说明:
写一个接口,调用另外两个HTTP接口,分别获取二十四节气和星座,最后放在一起返回。
用法 1、在线API我们访问极速数据网站,注册一个账号,就可以免费使用里面的一些在线API,平均每天有100次免费机会,对于我这样经常本地做一些测试的人来说完全够用了。
这里,我使用了其中的查询二十四节气API,和查询星座API,后面会提供案例代码,也可以直接使用我的。
2、编写在线API查询这里,我们在查询时,模拟耗时的情况。
1.查询二十四节气
2.查询星座
3、编写查询服务 4、编写测试接口这里,我们专门加上了耗时计算。
5、效果可以看到,两个接口一共耗费了10秒左右才返回。
6、CompletableFuture并行查询现在我们来使用CompletableFuture改造下接口,并行查询两个HTTP接口再返回。
7、编写测试接口 8、CompletableFuture效果可以看到,时间缩短了一倍。
思考如果在微服务中,有一个很复杂的业务需要远程调用5个第三方laji厂家的接口,每个接口假设都耗时5秒,使用CompletableFuture并行处理最终需要多久?
答案是肯定的,同步查询需要25秒左右,CompletableFuture并行处理还是5秒左右,也就是说,同一个接口中,调用的耗时接口越多,CompletableFuture优化的幅度就越大。
示例代码可以下载我的完整示例代码本地按需测试,里面有我的极速数据API的key,省得自己注册账号了,每天免费就100次,先到先得哦。
到此这篇关于详解Java8 CompletableFuture的并行处理用法的文章就介绍到这了,更多相关Java8 CompletableFuture内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!