aaaa成人_日本一道本在线视频_国产高潮流白浆喷水在线观看_韩国专区福利一区二区_一区二区不卡视频_看全色黄大色黄大片女图片第一次

×

Dubbo源碼解析實戰 - 服務暴露原理

分類:互聯網熱點 編輯:聊聊云計算 瀏覽量:2
2020-07-20 13:33:06
dubbo面試中比較喜歡問的兩個點:服務發布和服務引用. # 人性的拷問 - 服務發布過程中做了哪些事 - dubbo都有哪些協議,他們之間有什么特點,缺省值是什么 - 什么是本地暴露和遠程暴露,他們的區別 直入主題 從啟動日志說起 ![](https://img-blog.csdnimg.cn/20191124151625334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 這里不同顏色的框將關鍵的地方畫了出來,一共有6種顏色, 從上到下 1. 暴露本地服務 2. 暴露遠程服務 3. 啟動netty 4. 連接zookeeper 5. 到zookeeper注冊 6. 監聽zookeeper # 全局總覽 先看官方文檔說明 ## 服務提供者暴露一個服務的詳細過程 - 服務提供者暴露服務的主過程 ![](https://img-blog.csdnimg.cn/20191124160150667.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 首先 `ServiceConfig` 類拿到對外提供服務的實際類 ref(如:HelloWorldImpl),然后通過 `ProxyFactory` 類的 `getInvoker` 方法使用 ref 生成一個 `AbstractProxyInvoker` 實例,到這一步就完成具體服務到 Invoker 的轉化。 接下來就是 Invoker 轉換到 Exporter 的過程。 ![](https://img-blog.csdnimg.cn/20191124161756667.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 看源碼,很多人最常問的一句話就是,怎么入手,也就是切入點.那么我們還是以開頭的日志為例,來找一個這個切入點 仔細看輸出日志,就會發現在暴露本地服務之前,有一句很重要的日志,就是 ```bash The service ready on spring started. service: com.alibaba.dubbo.demo.DemoService, dubbo version: 2.0.0, current host: 127.0.0.1 ``` > 該打印在今年八月被移除,具體原因不明, 留待日后分析,先繼續經典版本源碼 > ![] > ![](https://img-blog.csdnimg.cn/2019112416565177.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 定位到了`ServiceBean`這個類 - 繼承體系圖 ![](https://img-blog.csdnimg.cn/20191124165857776.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) > 繼續按照經典版本源碼講解,這里最新版源碼由于刪除了相關接口 從這個圖我們看到了許多和spring有關的東西,還發現了一個重要的接口,那就是`ApplicationListener` 就是spring的事件機制(event).什么是事件機制呢? 就比如監聽spring容器初始化完成.那我們就定位到這行日志的位置,往下debug ![](https://img-blog.csdnimg.cn/20191124170659797.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) ![](https://img-blog.csdnimg.cn/20191124170708847.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) ![](https://img-blog.csdnimg.cn/20191124170721312.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 重點!!! ![](https://img-blog.csdnimg.cn/20191124171616267.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) ![](https://img-blog.csdnimg.cn/20191124171851867.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 這個dubbo.properties文件是怎么時候加載的,好像我根本沒有設置,另外這個dubbo.properties文件的名字能不能改? ![](https://img-blog.csdnimg.cn/20191124195126940.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) - 同理,對于log4j.xml文件 ![](https://img-blog.csdnimg.cn/20191124195351829.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70) 接下來繼續往下走,下面這里就是我們的第二道面試題 ![](https://img-blog.csdnimg.cn/20191124195620539.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) - 因為dubbo是支持多協議的,看文檔原話 ![](https://img-blog.csdnimg.cn/20191124195642846.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) - Dubbo支持多種協議,默認使用的是dubbo協議 (https://blog.csdn.net/qq_33589510/article/details/103108713) 到了第三個面試題,也是服務發布的重點,`本地暴露和遠程暴露` ![](https://img-blog.csdnimg.cn/20191124201218464.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 為什么會有本地暴露和遠程暴露呢? 不從場景考慮討論技術的沒有意義是.在dubbo中我們一個服務可能既是Provider,又是Consumer,因此就存在他自己調用自己服務的情況,如果再通過網絡去訪問,那自然是舍近求遠 因此他是有本地暴露服務的這個設計 - 本地暴露是暴露在JVM中,不需要網絡通信 - 遠程暴露是將ip,端口等信息暴露給遠程客戶端,調用時需要網絡通信 ![](https://img-blog.csdnimg.cn/20191124202252323.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) ![](https://img-blog.csdnimg.cn/20191124202414239.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 從上圖可知,這里用到了Adaptive, - 點進ProxyFactory查看源碼 ![](https://img-blog.csdnimg.cn/20191124201927649.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) @Adaptive注解打在類上和方法上,他們是有區別的 在方法上,就會生成動態編譯的Adaptive類,下面就介紹一下怎么看這個動態編譯類的源碼 - 首先要將這個log4j的level調整為DEBUG ![](https://img-blog.csdnimg.cn/20191124202701924.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 為什么需要調整成DEBUG, 比如下圖 ![](https://img-blog.csdnimg.cn/20191124203107893.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 打開DEBUG后,我們重新啟動,就會看到日志有如下輸出,這段就是相關代碼,我們根據包名新建文件,如下 ![](https://img-blog.csdnimg.cn/20191124203137536.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) ![](https://img-blog.csdnimg.cn/20191124203245946.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 我們在getInvoker方法上打上斷點,重啟一下. ![](https://img-blog.csdnimg.cn/2019112420331334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) ![](https://img-blog.csdnimg.cn/20191124203346500.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) ![](https://img-blog.csdnimg.cn/20191124203355960.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 由上圖知道,本地暴露的url是以injvm開頭的,下面來看下遠程暴露,其實這個也是回答本地暴露和遠程暴露區別的一個回答點.面試回答要的并不是一個滿分的答案,而是從一些細節中,看出一個人,是否真的研究過源碼. ![](https://img-blog.csdnimg.cn/20191124203417820.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9qYXZhZWRnZS5ibG9nLmNzZG4ubmV0,size_1,color_FFFFFF,t_70) 還是回到開頭那句話,dubbo命名是很規范的,從Wrapper這個命名,其實可以和Spring的Bean Wrapper,以及裝飾者設計模式聯系起來.同時可以看看文檔中的編碼約定 # 參考 - https://www.jianshu.com/p/60a9263f2ee2 -

聲明:免責聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,也不承認相關法律責任。如果您發現本社區中有涉嫌抄襲的內容,請發

送郵件至:operations@xinnet.com進行舉報,并提供相關證據,一經查實,本站將立刻刪除涉嫌侵權內容。本站原創內容未經允許不得轉載,或轉載時

需注明出處:新網idc知識百科

免費咨詢獲取折扣

Loading
主站蜘蛛池模板: 国产精品不卡一区 | 日本一区二区三区免费软件 | 国产一区二区视频免费 | 无码少妇人妻专区在线视频 | 久久久久久一区国产精品 | 农田丰满艳肉妇hd | 性高潮久久久久 | 欧美日韩一区二区综合 | 国产一级视频免费看 | 国产精品无码在线 | 久久久久久久福利 | 国产精品久久久天天影视香蕉 | 富婆性猛交ⅹxxx乱大交 | WWW射我里面在线观看 | 久久精品黄色 | 成人免费视频国一国二在线观看 | 别揉我奶头~嗯~啊~视频免费网站 | 天天摸天天澡天天看 | 91福利网站在线观看 | 日本草逼| 国产稚嫩高中生呻吟激情在线视频 | 国产骚熟 | 精品一区二区三区四区 | 国产成人精品免费视频大全办公室 | 一本到不卡免费一区二区 | 久久一精品| 女人被躁到高潮嗷嗷叫69 | 欧美在线播放成人a | 午夜激情综合网 | 欧美日日爱 | 亚洲国产精品久久久久秋霞不卡 | 亚洲色大成网站久久久 | 日本高清不卡中文字幕免费 | 国产精品色婷婷99久久精品 | 91精品久久久久久久久中文字幕 | 亚洲中文无码成人影院 | 免费AV片在线观看蜜芽TV | 天天操天操 | 欧美久久一二区 | 国内精品人妻无码久久久影院蜜桃 | 国99精品无码一区二区三区 |