Dubbo源码解析 —— Zookeeper 订阅

前言

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

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

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

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

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

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

插播面试题

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

前戏铺垫

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

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

直入主题

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

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

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

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

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

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

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

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

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

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

写在最后

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

原文发布于微信公众号 - 芋道源码(YunaiV)

原文发表时间:2018-01-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java进阶架构师

dubbo专题-深入浅出zookeeper订阅原理

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

15040
来自专栏程序人生

分布式系统中的监工:Overseer

最近从无趣的工作中发现了有趣的事情,工作和业余时间都扑了些精力上去,本待上周末最终的成果出来后再写文章的,无奈事情太多,代码还没写完,二月上旬已过,再不写文章春...

33870
来自专栏程序员互动联盟

程序员如何显著提高效率

曾经有很长的一段时间一直在学习和探索提升工作效率&身心健康的方法。讲讲我个人的经历吧! ? 加速度(一个电脑的有用程度和它里面装的软件数成反比) 给电脑换上SS...

29870
来自专栏美团技术团队

“小众”之美——Ruby在QA自动化中的应用

20730
来自专栏WeTest质量开放平台团队的专栏

5天2亿活跃用户,2017QQ“LBS+AR”天降红包活动后台揭密

作者王家彬,腾讯后台开发工程师,参与“LBS+AR”天降红包项目,其所在“2016春节红包联合项目团队”获得2016公司级业务突破奖。

17130
来自专栏CSDN技术头条

.NET技术+25台服务器怎样支撑世界第54大网站

【编者按】StackOverflow是一个IT技术问答网站,用户可以在网站上提交和回答问题。当下的StackOverflow已拥有400万个用户,4000万个回...

27870
来自专栏JavaEdge

设计模式实战 - 中介者模式

以终端销售商(以服务最终客户为目标的企业,如超市)为例,采购部门要采购IBM的电脑,它根据以下两个要素来决定采购数量。

16740
来自专栏逸鹏说道

.NET技术+25台服务器怎样支撑世界第54大网站

英文原文:StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It's All Abou...

40270
来自专栏DevOps时代的专栏

软件测试金字塔

? “测试金字塔”是一个隐喻,它告诉我们将软件测试分成不同颗粒度的桶,也给出了我们应该在这些组中进行多少次测试的想法。尽管测试金字塔的概念已经存在了一段时间,...

53950
来自专栏BestSDK

从绘制到工具,一套完整的产品经理制图干货

很多人拿到需求就火急火燎的开始画原型,然后画着画着觉得有些地方没有考虑到,又回头去改,如果在画原型之前,你能将自己的业务流程想好,用户的操作流程想好,页面跳转想...

28540

扫码关注云+社区

领取腾讯云代金券