
回复
大家好,我是不才陈某~
请求合并到底有什么意义呢?我们来看下图。
假设我们3个用户(用户id分别是1、2、3),现在他们都要查询自己的基本信息,请求到服务器,服务器端请求数据库,发出3次请求。我们都知道数据库连接资源是相当宝贵的,那么我们怎么尽可能节省连接资源呢?
这里把数据库换成被调用的远程服务,也是同样的道理。
我们改变下思路,如下图所示。
我们在服务器端把请求合并,只发出一条SQL查询数据库,数据库返回后,服务器端处理返回数据,根据一个唯一请求ID,把数据分组,返回给对应用户。
LinkedBlockQueue
阻塞队列ScheduledThreadPoolExecutor
定时任务线程池CompleteableFuture future
阻塞机制(Java 8 的 CompletableFuture 并没有 timeout 机制,后面优化,使用了队列替代)
Callable是什么可以参考:
https://blog.csdn.net/baidu_19473529/article/details/123596792
请求合并,批量的办法能大幅节省被调用系统的连接资源,本例是以数据库为例,其他RPC调用也是类似的道理。缺点就是请求的时间在执行实际的逻辑之前增加了等待时间,不适合低并发的场景。
源码:https://gitee.com/apple_1030907690/spring-boot-kubernetes/tree/v1.0.5
文章转载自公众号: 码猿技术专栏