dubbo专题-深入浅出zookeeper订阅原理
进行了解析.知道dubbo会对zookeeper的信息进行一个本地的文件缓存.如果你只是简单的回答出这个本地的文件缓存,可能面试官会点到为止,但是如果你按照我那样从源码角度分析,甚至连缓存到哪个磁盘文件都一清二楚,那么面试官必然会根据这个问题深入问下去.既然要深入问下去,那他会从哪个角度问呢?
比如公司新来了妹子,老司机们在下班的时候总会套路一下,问她们你男朋友怎么不接你下班啊.这个时候妹子的回答往往也就两个,一个是我没有男朋友啊,另一个是他忙啊(这说明她有男朋友).从这里例子就可以很容易看出,你的发言,对对方的回答我们是能一定程度预判的.再比如,我一直自称肥朝,假如你发现我其实没有你想的那么肥,按照正常的思维你就会问我,既然你没这么肥为什么要叫肥朝.这再次说明了,对方的提问,我们是可预判的.
同理可得,你回答了会缓存本地文件,并且连目录都一清二楚,那他如果照着这个问题深入问下去,他可能会问什么呢?可能会问,既然是缓存,那么自然会存在和实时数据不同步,那么他是什么时候去更新这个缓存?鉴于你前面回答得这么透彻,可能还会加上一句,他这个更新的过程是怎么样的?能画图给我讲一下吗?
当然看到这里你可能会反驳,万一他不按套路出牌,或者我回答了这个问题他又继续深入问下去,那可咋整?其实坦白说,虽然我源码解析以面试题为切入,但是我在dubbo源码解析-zookeeper创建节点中也提到了,看源码并不是以面试为最终目的.因此,简书上关注肥朝,每周一篇dubbo源码解析,互相交流进步,提升自己的层次,而不是在低层次努力,这才是应对"不按套路出牌"和"深入问下去"的不二法宝.
在dubbo中,什么时候更新本地的zookeeper信息缓存文件?订阅zookeeper信息的整体过程是怎么样的?
用中文来剧透接下来源码的一些羞嗒嗒的剧情
只需将这幅图记在心中,用小学六年苦练的看图写作文功力即可概括出面试题答案.
直入主题
这个方法是我们的老朋友了,我们在前面的zookeeper连接和zookeeper创建节点的时候都已经见过(图中蓝色标注的),这次我们还是讲一行代码(红色标注的)
这里就开始发起订阅请求和订阅失败重试,可以对照前期铺垫中的图
这里设置了监听回调的地址,即回调给FailbackRegistry中的notify
从这里我们可以看到,创建的是持久节点
下面开始对该节点设置监听(其中涉及一下zkClient的api)
下面要开始更新新的服务信息,服务启动和节点更新回调(前面设置了回调到这里)都会调用到这里
那么下面就要敲黑板划重点了,由前期铺垫我们就知道这里要开始更新本地缓存文件的信息
这里采用了线程池来更新,dubbo里面到处都是并发编程,所以面试喜欢问多线程这个真的不是在装逼,线程的意识还是很重要的,同时如果关注肥朝每周一篇dubbo源码解析(真不是套路),面试问到项目哪里用到了多线程例子再也不用担心了,把dubbo里面的例子套一下妥妥的.
dubbo在操作文件的时候还会对文件进行加锁,看源码要特别留心这些异常信息,方便出问题时快速定位(其实也是在粗暴式点题怎么看源码)
更新完文件后,对比新旧的信息是否有变化,有则重新暴露服务
欢乐的时间总是短暂的,又到了说再见的时间,因为最近都是996,写到这里的时候已经是周日的凌晨两点半.期待下周与你相遇.鉴于本人才疏学浅,不对的地方还望斧正。
原文发布时间为:2018-10-24
本文作者:肥朝
本文来自云栖社区合作伙伴“java进阶架构师”,了解相关信息可以关注“java进阶架构师”。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
独家 | 如何利用大规模无监督数据建立高水平特征?
GIF来自:https://giphy.com/gifs/features-7BldZFcv2pof6 如何构建更厉害的特征检测器?我们可以通过无监督学习来做到这一点吗? 请注意,本文是一篇我自己留档用的回顾总结材料。 Paper来自此网站: https://arxiv.org/pdf/1112.6209.pdf 摘要 这篇文章的作者们喜欢利用未标记数据制作特定的分类特征识别器。(例如,使用未标记的人脸图像制作人脸识别器。)为实现这一目标,作者在大型数据集上制作了一个9层的自动稀疏编码器。与普遍的认知相反,这可以在没有任何标签数据的情况下构建面部检测器,而且优于ImageNet数据的最新性能。 (在2012年)。 介绍 这篇文章的目的是只依靠未标记图像构建一个特定的分类特征识别器,同时这也是神经科学的构想:“人类大脑中存在高度特定类的神经元”,通
- 下一篇
1024程序员节这天,我故意写了个死循环~
导致CPU100%的原因很多,而程序中出现死循环就是原因之一。然而,并不是每个人在工作中都有机会踩中这个坑。我就是其中一个没踩过的。人生似乎有些不完整。 所以,我做了一个很重要的决定:在程序中写一个死循环。看看会发生什么事情。 当然,不是在生产环境。 我搭建了一个实验环境来做实验。只是这个实验环境不仅可以用于这个死循环实验。以下是这个环境的结构图: 还是老样子,使用Vagrant + Virtualbox + Ansible自动化搭环境。 我们会写一个简单的Spring MVC 应用,然后其中一个接口里会有死循环代码: 以下是我自己尝试找出这个死循环的过程。 一、使用top,查看是哪个进程的问题 我请求一次: http://192.168.88.10:9898/web/loop 然后,我打开新窗口,又请求一次 这里,我好奇CPU没有到200%。一直在120%和130%之间。P.S. 我一定是某个知识点不牢固,要不,不会有这个疑问。 二、堆空间 因为不涉及JVM堆空间问题,执行 jstat -gcutil 32593 1s 没看出什么问题。32593为Java进程ID,1s指1秒抽样一次...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8