Dubbo源码解析 —— Zookeeper 订阅

>>最全面的Java面试大纲及答案解析(建议收藏)  

Dubbo源码解析 —— Zookeeper 订阅

作者:肥朝 原文地址:https://www.jianshu.com/p/73224a6c07bb

友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。

友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。

友情提示:欢迎关注公众号【芋道源码】。😈关注后,拉你进【源码圈】微信群和【肥朝】搞基嗨皮。

前言

上周写完了服务暴露总结之后发现遗漏了一个很重要的点,在dubbo源码解析-zookeeper连接中我们对面试高频题

dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?

进行了解析.知道dubbo会对zookeeper的信息进行一个本地的文件缓存.如果你只是简单的回答出这个本地的文件缓存,可能面试官会点到为止,但是如果你按照我那样从源码角度分析,甚至连缓存到哪个磁盘文件都一清二楚,那么面试官必然会根据这个问题深入问下去.既然要深入问下去,那他会从哪个角度问呢?

比如公司新来了妹子,老司机们在下班的时候总会套路一下,问她们你男朋友怎么不接你下班啊.这个时候妹子的回答往往也就两个,一个是我没有男朋友啊,另一个是他忙啊(这说明她有男朋友).从这里例子就可以很容易看出,你的发言,对对方的回答我们是能一定程度预判的.再比如,我一直自称肥朝,假如你发现我其实没有你想的那么肥,按照正常的思维你就会问我,既然你没这么肥为什么要叫肥朝.这再次说明了,对方的提问,我们是可预判的.

同理可得,你回答了会缓存本地文件,并且连目录都一清二楚,那他如果照着这个问题深入问下去,他可能会问什么呢?可能会问,既然是缓存,那么自然会存在和实时数据不同步,那么他是什么时候去更新这个缓存?鉴于你前面回答得这么透彻,可能还会加上一句,他这个更新的过程是怎么样的?能画图给我讲一下吗?

当然看到这里你可能会反驳,万一他不按套路出牌,或者我回答了这个问题他又继续深入问下去,那可咋整?其实坦白说,虽然我源码解析以面试题为切入,但是我在dubbo源码解析-zookeeper创建节点中也提到了,看源码并不是以面试为最终目的.因此,简书上关注肥朝,每周一篇dubbo源码解析,互相交流进步,提升自己的层次,而不是在低层次努力,这才是应对"不按套路出牌"和"深入问下去"的不二法宝.

Dubbo源码解析 —— Zookeeper 订阅

插播面试题

  • 在dubbo中,什么时候更新本地的zookeeper信息缓存文件?订阅zookeeper信息的整体过程是怎么样的?

前戏铺垫

用中文来剧透接下来源码的一些羞嗒嗒的剧情

Dubbo源码解析 —— Zookeeper 订阅

只需将这幅图记在心中,用小学六年苦练的看图写作文功力即可概括出面试题答案.

Dubbo源码解析 —— Zookeeper 订阅

直入主题

这个方法是我们的老朋友了,我们在前面的zookeeper连接zookeeper创建节点的时候都已经见过(图中蓝色标注的),这次我们还是讲一行代码(红色标注的)

Dubbo源码解析 —— Zookeeper 订阅

这里就开始发起订阅请求和订阅失败重试,可以对照前期铺垫中的图

Dubbo源码解析 —— Zookeeper 订阅

这里设置了监听回调的地址,即回调给FailbackRegistry中的notify

Dubbo源码解析 —— Zookeeper 订阅

从这里我们可以看到,创建的是持久节点

Dubbo源码解析 —— Zookeeper 订阅

Dubbo源码解析 —— Zookeeper 订阅

下面开始对该节点设置监听(其中涉及一下zkClient的api)

Dubbo源码解析 —— Zookeeper 订阅

Dubbo源码解析 —— Zookeeper 订阅

Dubbo源码解析 —— Zookeeper 订阅

Dubbo源码解析 —— Zookeeper 订阅

Dubbo源码解析 —— Zookeeper 订阅

下面要开始更新新的服务信息,服务启动和节点更新回调(前面设置了回调到这里)都会调用到这里

Dubbo源码解析 —— Zookeeper 订阅

Dubbo源码解析 —— Zookeeper 订阅

Dubbo源码解析 —— Zookeeper 订阅

那么下面就要敲黑板划重点了,由前期铺垫我们就知道这里要开始更新本地缓存文件的信息

Dubbo源码解析 —— Zookeeper 订阅

这里采用了线程池来更新,dubbo里面到处都是并发编程,所以面试喜欢问多线程这个真的不是在装逼,线程的意识还是很重要的,同时如果关注肥朝每周一篇dubbo源码解析(真不是套路),面试问到项目哪里用到了多线程例子再也不用担心了,把dubbo里面的例子套一下妥妥的.

Dubbo源码解析 —— Zookeeper 订阅

Dubbo源码解析 —— Zookeeper 订阅

dubbo在操作文件的时候还会对文件进行加锁,看源码要特别留心这些异常信息,方便出问题时快速定位(其实也是在粗暴式点题怎么看源码)

Dubbo源码解析 —— Zookeeper 订阅

更新完文件后,对比新旧的信息是否有变化,有则重新暴露服务

Dubbo源码解析 —— Zookeeper 订阅

写在最后

欢乐的时间总是短暂的,又到了说再见的时间,因为最近都是996,写到这里的时候已经是周日的凌晨两点半.期待下周与你相遇.鉴于本人才疏学浅,不对的地方还望斧正,也欢迎关注我的简书,名称为肥朝