why哥这里有一道Dubbo高频面试题,请查收。 (2)

简介: why哥这里有一道Dubbo高频面试题,请查收。 (2)

image.png


请求发起,等待响应


首先前面两节我们都说到了客户端用户线程的等待,也就是一次请求在等待响应。


这个等待在代码里面是怎么体现的呢?


答案藏在这个方法里面:


org.apache.dubbo.rpc.protocol.AsyncToSyncInvoker#invoke


image.png


首先你看这个类名,AsyncToSyncInvoker,异步调用转同步调用,就感觉不简单,里面肯定搞事情了。


标号为 ① 的地方,是 invoker 调用,调用之后的返回是一个AsyncRpcResult。


在这个方法继续往下 Debug,没几步就可以走到这个地方:


org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeChannel#request(java.lang.Object, int, java.util.concurrent.ExecutorService)


image.png


135 行就是 channel.send(req)。在往外发请求了,在发请求之前构建了一个 DefaultFuture。然后在请求发送出去之后,140 行返回了这个 future 。


最关键的秘密就藏在 133 行的这个 newFuture 里面。


看一看对应代码:


image.png


这个 newFuture 主要干了两件事:


  • 初始化 DefaultFuture 。


  • 检测是否超时。


我们看看初始化 DefaultFuture 的时候干了啥事:


image.png


image.png


这个 id 是 AtomicLong 从 0 开始自增出来的。


代码里面还给了这样一行注释:


getAndIncrement() When it grows to MAX_VALUE, it will grow to MIN_VALUE, and the negative can be used as ID


说这个方法当增加到 MAX_VALUE 后再次调用会变成 MIN_VALUE。但是没有关系,负数也是可以当做 ID 来用的。


这个 DefaultFuture 对象构建完成后是返回回去了。


返回到哪里去呢?


就是 DubboInvoker 的 doInvoker 方法中下面框起来的代码:


image.png


image.png


接着说说标号为 ② 的地方。


首先是判断当前调用模式是否是同步调用。我们这里就是同步调用,于是进入到 if 判断里面的逻辑。在这里面一看,调用的 get 方法,还带有超时时间。


看一下这个 get 方法是怎么样的:


微信图片_20220426213821.png


可以看到这个 get 方法不是一个简单的异步编程的 CompletableFuture.get 。里面还包含了一个 ThreadlessExecutor 的 waitAndDrain 方法的逻辑。


这个方法一进来就是 queue.take 方法,阻塞等待。


这个队列里面装的是什么东西?


全局查找往这个队列里面放东西的逻辑,只有下面这一处:


image.png


说明这个队列里面扔的是一个 runable 的任务。


这个任务是什么呢?


我们这里先买个关子,放到下一小节里面去讲。


你只要知道:如果队列里面没有任务,那么用户线程就会一直在 take 这里阻塞等待。


image.png




目录
相关文章
|
1天前
|
负载均衡 Dubbo Java
Dubbo面试题
Dubbo面试题
36 0
|
1天前
|
自然语言处理 Dubbo Java
【面试问题】Dubbo 推荐用什么协议?
【1月更文挑战第27天】【面试问题】Dubbo 推荐用什么协议?
|
8月前
|
缓存 Dubbo Java
Java面试题顶级理解!Dubbo注册中心挂了,服务还可以继续通信吗?
什么情况?一位工作了 5 年的 Java 程序员,竟然回答不出这个问题?说“Dubbo注册中心挂了, 服务之间还可以继续通信吗”?今天,我话2分钟时间给大家来聊一聊。
194 0
|
1天前
|
监控 负载均衡 Dubbo
Dubbo 面试题及答案整理,最新面试题
Dubbo 面试题及答案整理,最新面试题
102 1
|
7月前
|
Dubbo Java 应用服务中间件
Dubbo第二讲:深入理解dubbo分布式服务框架/负载/容错/调优/高可用/dubbo网关/面试/技术选型
Dubbo第二讲:深入理解dubbo分布式服务框架/负载/容错/调优/高可用/dubbo网关/面试/技术选型
160 0
|
1天前
|
XML Dubbo Java
【面试问题】Dubbo 的整体架构设计有哪些分层?
【1月更文挑战第27天】【面试问题】Dubbo 的整体架构设计有哪些分层?
|
6月前
|
Dubbo Java 应用服务中间件
Java面试题 - Dubbo
Java面试题 - Dubbo
96 0
|
7月前
|
缓存 Dubbo Java
面试常问的dubbo的spi机制到底是什么?(下)
本文是接着 面试常问的dubbo的spi机制到底是什么?(上)来继续剖析dubbo spi机制源码,来看看dubbo的spi机制的其它特性功能。 #### 目录: - 前文回顾 - 实现类对象构造 - 自适应机制 - 自动激活 - 总结
面试常问的dubbo的spi机制到底是什么?(下)
|
7月前
|
Dubbo Java 应用服务中间件

热门文章

最新文章