? ? ? ?分布式現在已經火過了(話說現在仍然很火嘿般,只是趕不上微服務的熱度了),但是dubbo過時了嗎涯冠?反正我認為沒有炉奴,不然apache為何要接手維護這個框架呢,我沒看錯的話還是頂級項目呢蛇更。瞻赶。沒錯赛糟,現在大家都在呼喚微服務了,springboot砸逊、springcloud璧南,感覺不會這兩個就不是一個好的程序員,沒錯师逸,我一直都不覺得現在的自己有多么優(yōu)秀司倚,就是個渣渣,先把dubbo玩會了篓像,再去考慮追求時尚嘛动知。當然我其實對于dubbo也是了解的不多,所以也就是寫點東西员辩,給自己以后看看的盒粮,萬一忘記了可以很快想起來。
? ? ? ? 首先奠滑,玩dubbo先得看看他的基本原理丹皱,請自行移到官網,講的挺清楚的宋税。我這里不寫了摊崭,我就從搭建注冊中心zk開始吧。沒錯弃甥,這個是推薦的注冊中心爽室,自己的也不是不可以用,但是我們這種渣渣還是聽話點比較好淆攻。
? ? ? ? 下載阔墩,解壓(tar -zxvf)安轉,沒什么說的瓶珊。然后啸箫,我們就該為它配置點東西了,注冊中心嘛伞芹,注冊的地址放在哪里呢忘苛,沒錯,其實它的配置也有唱较,不過我建議還是在安裝目錄中加一個data目錄放置注冊地址扎唾,然后加一個log放置日志。之后進入到conf目錄中南缓,有個有意思的東西胸遇,zoo_sample.cfg,初看之下,這個不就是配置文件嗎汉形,沒錯纸镊,就是他倍阐,直接改?nono逗威,這個其實我是例子或者說樣板峰搪,或者說就是用來讓你修改的文件,但是名字不能使用這個凯旭。所以自己復制一份概耻,然后命名為zoo.cfg,現在就可以動手修改了尽纽,剛剛不是mikdir 了兩個文件夾嘛咐蚯,配置進去即可。不過dataDir是data的目錄弄贿,自己再寫一個dataLogDir的目錄信息春锋。其他的不用動,然后出來啟動差凹,ok期奔,單機版zookeeper就啟動了。集群其實就是復制危尿,然后修改一下配置即可呐萌。
? ? ? ? 然后搭建product(服務提供方),配置文件application(名字) -> registry(注冊中心谊娇,剛剛搭建的肺孤,配置上地址和端口,聲明zookeeper即可) ->protocol (本服務的地址和端口)-> service(暴露的服務济欢,也就是接口)赠堵,然后實現類的bean可以使用注解也可以在這里配置一個bean標簽。ok法褥,容器啟動茫叭,沒事可以看看日志,就可以看到dubbo的啟動和注冊的地址了半等。這里可以看到url就是host+ 端口 + 接口全路徑揍愁,而在服務提供方又實現了此接口,根據id可以找到實現類杀饵,于是乎莽囤,服務方就完成了。它在注冊的時候就會把自己所擁有的所有的方法列表一起上報切距。
? ? ? ? 然后搭建consumer(服務消費方)烁登,同樣的配置,同樣是application->registry->reference(這個稍微說一下蔚舀,這里需要注明接口 +id和提供方的ref一致+url就是服務方的host和端口)饵沧,這樣就可以建立通訊了。
? ? ? ? (先不寫了赌躺,感冒頭疼狼牺。。歇一會礼患。)
? ? ? ? 好了是钥,今天把最后一點寫完,剛好自己寫了幾行代碼缅叠,真的悄泥,就是幾行,關于基于接口調用和基于接口實現類調用的兩種方式 https://github.com/1581501186/BaseInterfaceWithNoImpl肤粱;
? ? ? ? 如果說今天最大的收獲弹囚,我一定會說就是最后的這幾行代碼。因為之前一直想不明白领曼,配置的全部都是接口鸥鹉,url傳遞的也是接口(還有url是怎么傳遞的,為什么調用方法庶骄,傳遞的是url毁渗,這些都是哪里配置的,我也終于想通了单刁,原來消費端和生產端都是代理灸异,生產端也是通過代理內部拼接url,消費端同樣是拼接url羔飞,數據傳輸全部通過pojo肺樟,所以也只有pojo實現序列化接口就可以了),那么到底是怎么反射創(chuàng)建對象的呢褥傍,總不能創(chuàng)建接口吧儡嘶。然后折騰了一下午,終于恍风,把這幾行代碼寫完了就明白了蹦狂。也明白了為何框架都有一堆的handler了。代理朋贬,沒錯凯楔,都是動態(tài)代理的緣故。有意思锦募。
? ? ? ? 沒了摆屯,反正就當做筆記,自己看得懂就可以了。虐骑。准验。以后我技術更進一步,我會開始分享廷没,現在的文章基本上都是為了記筆記糊饱。
? ? 注意:1、dubbo的使用颠黎,數據交互是通過pojo封裝對象信息傳輸的另锋,也就是消費方調用什么方法,在服務方調用計算完成之后狭归,以pojo封裝之后傳遞的夭坪,這樣cpu的壓力在服務方。
? ? 2过椎、dubbo的pojo需要在tcp協議傳輸室梅,所以序列化接口必須實現,不然后續(xù)的object流是讀不出來的潭流。
? ? 3竞惋、dubbo的url中,路徑可以理解成就是實現類的全路徑灰嫉,后續(xù)通過反射創(chuàng)建對象拆宛,而url的參數就是方法名和方法的參數,這樣就可以在交互中定位到類和方法了讼撒,然后后續(xù)的過程就不用解釋了浑厚。