知名建筑類(lèi)的網(wǎng)站網(wǎng)絡(luò)營(yíng)銷(xiāo)模式下品牌推廣途徑
?作者簡(jiǎn)介:CSDN內(nèi)容合伙人、信息安全專(zhuān)業(yè)在校大學(xué)生🏆
🔥系列專(zhuān)欄 :狂神說(shuō)Java
📃新人博主 :歡迎點(diǎn)贊收藏關(guān)注,會(huì)回訪!
💬舞臺(tái)再大,你不上臺(tái),永遠(yuǎn)是個(gè)觀眾。平臺(tái)再好,你不參與,永遠(yuǎn)是局外人。能力再大,你不行動(dòng),只能看別人成功!沒(méi)有人會(huì)關(guān)心你付出過(guò)多少努力,撐得累不累,摔得痛不痛,他們只會(huì)看你最后站在什么位置,然后羨慕或鄙夷。
文章目錄
- 15.Dubbo和Zookeeper集成
- 15.1分布式理論
- 15.1.1Dubbo文檔
- 15.2Dubbo的概念和介紹
- 15.2.1Dubbo是什么
- 15.2.2 Dubbo能做什么
- 15.3搭建測(cè)試環(huán)境
- 15.3.1Zookeeper介紹
- 15.3.2windows下安裝zookeeper
- 15.3.2window下安裝dubbo-admin
- 15.4SpringBoot + Dubbo + zookeeper
- 15.4.1框架搭建
- 15.4.2服務(wù)提供者
- 15.4.3服務(wù)消費(fèi)者
- 展望未來(lái)
RPC【Remote Procedure Call】是指遠(yuǎn)程過(guò)程調(diào)用,主要作用: A機(jī)器的程序調(diào)用 B機(jī)器的 api
Dubbo是一個(gè)高性能的基于java實(shí)現(xiàn)的RPC通信框架,本質(zhì)是一個(gè)jar包,能夠連接到zookeeper的服務(wù)并使用
服務(wù)注冊(cè)與發(fā)現(xiàn),zookeeper,沒(méi)有熔斷機(jī)制,借助了Hystrix
15.Dubbo和Zookeeper集成
15.1分布式理論
在《分布式系統(tǒng)原理與范型》一書(shū)中有如下定義:“分布式系統(tǒng)是若干獨(dú)立計(jì)算機(jī)的集合,這些計(jì)算機(jī)對(duì)于用戶(hù)來(lái)說(shuō)就像單個(gè)相關(guān)系統(tǒng)”;
分布式系統(tǒng)是由一組通過(guò)網(wǎng)絡(luò)進(jìn)行通信、為了完成共同的任務(wù)而協(xié)調(diào)工作的計(jì)算機(jī)節(jié)點(diǎn)組成的系統(tǒng)。分布式系統(tǒng)的出現(xiàn)是為了用廉價(jià)的、普通的機(jī)器完成單個(gè)計(jì)算機(jī)無(wú)法完成的計(jì)算、存儲(chǔ)任務(wù)。其目的是利用更多的機(jī)器,處理更多的數(shù)據(jù)。
分布式系統(tǒng)(distributed system)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)。
首先需要明確的是,只有當(dāng)單個(gè)節(jié)點(diǎn)的處理能力無(wú)法滿(mǎn)足日益增長(zhǎng)的計(jì)算、存儲(chǔ)任務(wù)的時(shí)候,且硬件的提升(加內(nèi)存、加磁盤(pán)、使用更好的CPU)高昂到得不償失的時(shí)候,應(yīng)用程序也不能進(jìn)一步優(yōu)化的時(shí)候,我們才需要考慮分布式系統(tǒng)。(所以分布式不應(yīng)該在一開(kāi)始設(shè)計(jì)系統(tǒng)時(shí)就考慮到)因?yàn)?#xff0c;分布式系統(tǒng)要解決的問(wèn)題本身就是和單機(jī)系統(tǒng)一樣的,而由于分布式系統(tǒng)多節(jié)點(diǎn)、通過(guò)網(wǎng)絡(luò)通信的拓?fù)浣Y(jié)構(gòu),會(huì)引入很多單機(jī)系統(tǒng)沒(méi)有的問(wèn)題,為了解決這些問(wèn)題又會(huì)引入更多的機(jī)制、協(xié)議,帶來(lái)更多的問(wèn)題。。。
15.1.1Dubbo文檔
隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)站應(yīng)用的規(guī)模不斷擴(kuò)大,常規(guī)的垂直應(yīng)用架構(gòu)已無(wú)法應(yīng)對(duì),分布式服務(wù)架構(gòu)以及流動(dòng)計(jì)算架構(gòu)勢(shì)在必行,急需一個(gè)治理系統(tǒng)確保架構(gòu)有條不紊的演進(jìn)。
在Dubbo的官網(wǎng)文檔有這樣一張圖
單一應(yīng)用架構(gòu)
當(dāng)網(wǎng)站流量很小時(shí),只需一個(gè)應(yīng)用,將所有功能都部署在一起,以減少部署節(jié)點(diǎn)和成本。此時(shí),用于簡(jiǎn)化增刪改查工作量的數(shù)據(jù)訪問(wèn)框架(ORM)是關(guān)鍵。
適用于小型網(wǎng)站,小型管理系統(tǒng),將所有功能都部署到一個(gè)功能里,簡(jiǎn)單易用。
缺點(diǎn):
1、性能擴(kuò)展比較難
2、協(xié)同開(kāi)發(fā)問(wèn)題
3、不利于升級(jí)維護(hù)
垂直應(yīng)用架構(gòu)
當(dāng)訪問(wèn)量逐漸增大,單一應(yīng)用增加機(jī)器帶來(lái)的加速度越來(lái)越小,將應(yīng)用拆成互不相干的幾個(gè)應(yīng)用,以提升效率。此時(shí),用于加速前端頁(yè)面開(kāi)發(fā)的Web框架(MVC)是關(guān)鍵。
通過(guò)切分業(yè)務(wù)來(lái)實(shí)現(xiàn)各個(gè)模塊獨(dú)立部署,降低了維護(hù)和部署的難度,團(tuán)隊(duì)各司其職更易管理,性能擴(kuò)展也更方便,更有針對(duì)性。
缺點(diǎn):公用模塊無(wú)法重復(fù)利用,開(kāi)發(fā)性的浪費(fèi)
分布式服務(wù)架構(gòu)
當(dāng)垂直應(yīng)用越來(lái)越多,應(yīng)用之間交互不可避免,將核心業(yè)務(wù)抽取出來(lái),作為獨(dú)立的服務(wù),逐漸形成穩(wěn)定的服務(wù)中心,使前端應(yīng)用能更快速的響應(yīng)多變的市場(chǎng)需求。此時(shí),用于提高業(yè)務(wù)復(fù)用及整合的分布式服務(wù)框架(RPC)是關(guān)鍵。
流動(dòng)計(jì)算架構(gòu)
當(dāng)服務(wù)越來(lái)越多,容量的評(píng)估,小服務(wù)資源的浪費(fèi)等問(wèn)題逐漸顯現(xiàn),此時(shí)需增加一個(gè)調(diào)度中心基于訪問(wèn)壓力實(shí)時(shí)管理集群容量,提高集群利用率。此時(shí),用于提高機(jī)器利用率的資源調(diào)度和治理中心(SOA)[ Service Oriented Architecture]是關(guān)鍵。
15.2什么是RPC
RPC【Remote Procedure Call】是指遠(yuǎn)程過(guò)程調(diào)用,是一種進(jìn)程間通信方式,他是一種技術(shù)的思想,而不是規(guī)范。它允許程序調(diào)用另一個(gè)地址空間(通常是共享網(wǎng)絡(luò)的另一臺(tái)機(jī)器上)的過(guò)程或函數(shù),而不用程序員顯式編碼這個(gè)遠(yuǎn)程調(diào)用的細(xì)節(jié)。即程序員無(wú)論是調(diào)用本地的還是遠(yuǎn)程的函數(shù),本質(zhì)上編寫(xiě)的調(diào)用代碼基本相同。
也就是說(shuō)兩臺(tái)服務(wù)器A,B,一個(gè)應(yīng)用部署在A服務(wù)器上,想要調(diào)用B服務(wù)器上應(yīng)用提供的函數(shù)/方法,由于不在一個(gè)內(nèi)存空間,不能直接調(diào)用,需要通過(guò)網(wǎng)絡(luò)來(lái)表達(dá)調(diào)用的語(yǔ)義和傳達(dá)調(diào)用的數(shù)據(jù)。為什么要用RPC呢?就是無(wú)法在一個(gè)進(jìn)程內(nèi),甚至一個(gè)計(jì)算機(jī)內(nèi)通過(guò)本地調(diào)用的方式完成的需求,比如不同的系統(tǒng)間的通訊,甚至不同的組織間的通訊,由于計(jì)算能力需要橫向擴(kuò)展,需要在多臺(tái)機(jī)器組成的集群上部署應(yīng)用。RPC就是要像調(diào)用本地的函數(shù)一樣去調(diào)遠(yuǎn)程函數(shù);
推薦閱讀文章:https://www.jianshu.com/p/2accc2840a1b
說(shuō)白了就是不同于調(diào)用本地的而是調(diào)用遠(yuǎn)程資源和方法
RPC原理:
步驟分析:
RPC兩個(gè)核心模塊:通訊,序列化。
15.2Dubbo的概念和介紹
15.2.1Dubbo是什么
Dubbo是一個(gè)分布式服務(wù)框架,致力于提供高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案,以及SOA服務(wù)治理方案。簡(jiǎn)單的說(shuō),dubbo就是個(gè)服務(wù)框架,如果沒(méi)有分布式的需求,其實(shí)是不需要用的,只有在分布式的時(shí)候,才有dubbo這樣的分布式服務(wù)框架的需求,并且本質(zhì)上是個(gè)服務(wù)調(diào)用的東東,說(shuō)白了就是個(gè)遠(yuǎn)程服務(wù)調(diào)用的分布式框架
其核心部分包含:
1》遠(yuǎn)程通訊: 提供對(duì)多種基于長(zhǎng)連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請(qǐng)求-響應(yīng)”模式的信息交換方式。
2》集群容錯(cuò): 提供基于接口方法的透明遠(yuǎn)程過(guò)程調(diào)用,包括多協(xié)議支持,以及軟負(fù)載均衡,失敗容錯(cuò),地址路由,動(dòng)態(tài)配置等集群支持。
3》自動(dòng)發(fā)現(xiàn): 基于注冊(cè)中心目錄服務(wù),使服務(wù)消費(fèi)方能動(dòng)態(tài)的查找服務(wù)提供方,使地址透明,使服務(wù)提供方可以平滑增加或減少機(jī)器。
15.2.2 Dubbo能做什么
- 透明化的遠(yuǎn)程方法調(diào)用,就像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法,只需簡(jiǎn)單配置,沒(méi)有任何API侵入。
- 軟負(fù)載均衡及容錯(cuò)機(jī)制,可在內(nèi)網(wǎng)替代F5等硬件負(fù)載均衡器,降低成本,減少單點(diǎn)。
- 服務(wù)自動(dòng)注冊(cè)與發(fā)現(xiàn),不再需要寫(xiě)死服務(wù)提供方地址,注冊(cè)中心基于接口名查詢(xún)服務(wù)提供者的IP地址,并且能夠平滑添加或刪除服務(wù)提供者。
15.3搭建測(cè)試環(huán)境
Apache Dubbo |?d?b??| 是一款高性能、輕量級(jí)的開(kāi)源Java RPC框架,它提供了三大核心能力:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯(cuò)和負(fù)載均衡,以及服務(wù)自動(dòng)注冊(cè)和發(fā)現(xiàn)。
dubbo官網(wǎng) http://dubbo.apache.org/zh-cn/index.html
服務(wù)提供者(Provider):暴露服務(wù)的服務(wù)提供方,服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)。
服務(wù)消費(fèi)者(Consumer):調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方,服務(wù)消費(fèi)者在啟動(dòng)時(shí),向注冊(cè)中心訂閱自己所需的服務(wù),服務(wù)消費(fèi)者,從提供者地址列表中,基于軟負(fù)載均衡算法,選一臺(tái)提供者進(jìn)行調(diào)用,如果調(diào)用失敗,再選另一臺(tái)調(diào)用。
注冊(cè)中心(Registry):注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者
監(jiān)控中心(Monitor):服務(wù)消費(fèi)者和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心
調(diào)用關(guān)系說(shuō)明
l 服務(wù)容器負(fù)責(zé)啟動(dòng),加載,運(yùn)行服務(wù)提供者。
l 服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)。
l 服務(wù)消費(fèi)者在啟動(dòng)時(shí),向注冊(cè)中心訂閱自己所需的服務(wù)。
l 注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。
l 服務(wù)消費(fèi)者,從提供者地址列表中,基于軟負(fù)載均衡算法,選一臺(tái)提供者進(jìn)行調(diào)用,如果調(diào)用失敗,再選另一臺(tái)調(diào)用。
l 服務(wù)消費(fèi)者和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心
15.3.1Zookeeper介紹
Zoookeeper是什么?
官方文檔上這么解釋zookeeper,它是一個(gè)分布式服務(wù)框架,是Apache Hadoop 的一個(gè)子項(xiàng)目,它主要是用來(lái)解決分布式應(yīng)用中經(jīng)常遇到的一些數(shù)據(jù)管理問(wèn)題,如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置項(xiàng)的管理等。
上面的解釋有點(diǎn)抽象,簡(jiǎn)單來(lái)說(shuō)zookeeper=文件系統(tǒng)+監(jiān)聽(tīng)通知機(jī)制。
①.文件系統(tǒng)
Zookeeper維護(hù)一個(gè)類(lèi)似文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)
每個(gè)子目錄項(xiàng)如 NameService 都被稱(chēng)作為 znode(目錄節(jié)點(diǎn)),和文件系統(tǒng)一樣,我們能夠自由的增加、刪除znode,在一個(gè)znode下增加、刪除子znode,唯一的不同在于znode是可以存儲(chǔ)數(shù)據(jù)的。
有四種類(lèi)型的znode:
- PERSISTENT-持久化目錄節(jié)點(diǎn)
客戶(hù)端與zookeeper斷開(kāi)連接后,該節(jié)點(diǎn)依舊存在 - PERSISTENT_SEQUENTIAL-持久化順序編號(hào)目錄節(jié)點(diǎn)
客戶(hù)端與zookeeper斷開(kāi)連接后,該節(jié)點(diǎn)依舊存在,只是Zookeeper給該節(jié)點(diǎn)名稱(chēng)進(jìn)行順序編號(hào) - EPHEMERAL-臨時(shí)目錄節(jié)點(diǎn)
-客戶(hù)端與zookeeper斷開(kāi)連接后,該節(jié)點(diǎn)被刪除 - EPHEMERAL_SEQUENTIAL-臨時(shí)順序編號(hào)目錄節(jié)點(diǎn)
客戶(hù)端與zookeeper斷開(kāi)連接后,該節(jié)點(diǎn)被刪除,只是Zookeeper給該節(jié)點(diǎn)名稱(chēng)進(jìn)行順序編號(hào)
2、 監(jiān)聽(tīng)通知機(jī)制
客戶(hù)端注冊(cè)監(jiān)聽(tīng)它關(guān)心的目錄節(jié)點(diǎn),當(dāng)目錄節(jié)點(diǎn)發(fā)生變化(數(shù)據(jù)改變、被刪除、子目錄節(jié)點(diǎn)增加刪除)時(shí),zookeeper會(huì)通知客戶(hù)端。
就這么簡(jiǎn)單,下面我們看看Zookeeper能做點(diǎn)什么呢?
Zookeeper能做什么
zookeeper功能非常強(qiáng)大,可以實(shí)現(xiàn)諸如分布式應(yīng)用配置管理、統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理等功能,我們這里拿比較簡(jiǎn)單的分布式應(yīng)用配置管理為例來(lái)說(shuō)明。
假設(shè)我們的程序是分布式部署在多臺(tái)機(jī)器上,如果我們要改變程序的配置文件,需要逐臺(tái)機(jī)器去修改,非常麻煩,現(xiàn)在把這些配置全部放到zookeeper上去,保存在 zookeeper 的某個(gè)目錄節(jié)點(diǎn)中,然后所有相關(guān)應(yīng)用程序?qū)@個(gè)目錄節(jié)點(diǎn)進(jìn)行監(jiān)聽(tīng),一旦配置信息發(fā)生變化,每個(gè)應(yīng)用程序就會(huì)收到 zookeeper 的通知,然后從 zookeeper 獲取新的配置信息應(yīng)用到系統(tǒng)中。
如上,你大致應(yīng)該了解zookeeper是個(gè)什么東西,大概能做些什么了,我們馬上來(lái)學(xué)習(xí)下zookeeper的安裝及使用
15.3.2windows下安裝zookeeper
1、下載zookeeper :地址http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.7.2/ 選擇bin.tar.gz雖然是linux但是也能用, 我們下載3.7.2 , 最新版!解壓zookeeper
2、運(yùn)行/bin/zkServer.cmd ,初次運(yùn)行會(huì)報(bào)錯(cuò),沒(méi)有zoo.cfg配置文件;
可能遇到問(wèn)題:閃退 !
解決方案:編輯zkServer.cmd文件末尾添加pause 。這樣運(yùn)行出錯(cuò)就不會(huì)退出,會(huì)提示錯(cuò)誤信息,方便找到原因。
3、修改zoo.cfg配置文件
將conf文件夾下面的zoo_sample.cfg復(fù)制一份改名為zoo.cfg即可。
注意幾個(gè)重要位置:
dataDir=./ 臨時(shí)數(shù)據(jù)存儲(chǔ)的目錄(可寫(xiě)相對(duì)路徑)
clientPort=2181 zookeeper的端口號(hào)
修改完成后再次啟動(dòng)zookeeper
4、使用zkCli.cmd測(cè)試
ls /:列出zookeeper根下保存的所有節(jié)點(diǎn)
[zk: 127.0.0.1:2181(CONNECTED) 4] ls /
[zookeeper]
create –e /guo123:創(chuàng)建一個(gè)guo節(jié)點(diǎn),值為123
15.3.2window下安裝dubbo-admin
dubbo本身并不是一個(gè)服務(wù)軟件。它其實(shí)就是一個(gè)jar包,能夠幫你的java程序連接到zookeeper,并利用zookeeper消費(fèi)、提供服務(wù)。
但是為了讓用戶(hù)更好的管理監(jiān)控眾多的dubbo服務(wù),官方提供了一個(gè)可視化的監(jiān)控程序dubbo-admin,不過(guò)這個(gè)監(jiān)控即使不裝也不影響使用。
我們這里來(lái)安裝一下:
1、下載dubbo-admin
地址 :https://github.com/apache/dubbo-admin/tree/develop
2、解壓進(jìn)入目錄
修改 dubbo-admin-0.6.0-release\dubbo-admin-server\src\main\resources 指定zookeeper地址 和端口
server.port=38080dubbo.registry.address=zookeeper://127.0.0.1:2181
3、在項(xiàng)目目錄下打包dubbo-admin
手動(dòng)分割-----------------------
第一次打包的過(guò)程有點(diǎn)慢,需要耐心等待!直到成功!好像會(huì)報(bào)錯(cuò),用idea打開(kāi)打包吧,好像也不行
還是錯(cuò)誤,直接超博客:
<plugin><!--添加配置跳過(guò)測(cè)試--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>
</plugin><!--添加配置跳過(guò)測(cè)試-->
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version><configuration><skipTests>true</skipTests></configuration>
</plugin>
手動(dòng)分割-----------------------
4、執(zhí)行 dubbo-admin\target 下的dubbo-admin-0.0.1-SNAPSHOT.jar
java -jar dubbo-admin-0.7.0-SNAPSHOT.jar
【注意:zookeeper的服務(wù)一定要打開(kāi)!】
執(zhí)行完畢,我們?nèi)ピL問(wèn)一下 http://localhost:38080/ , 但是沒(méi)有頁(yè)面,可能是ui沒(méi)開(kāi),所以cd dubbo-admin-ui 執(zhí)行 npm install 和 npm run dev
媽的,新版前后端分離,不是一個(gè)端口,要訪問(wèn)http://localhost:38082/
寫(xiě)一個(gè)腳本吧,一次開(kāi)啟前后端
@echo off :: 開(kāi)啟第一個(gè)CMD窗口并執(zhí)行命令 start cmd /k "cd F:\enviroment\zookeeper-3.7.2\apache-zookeeper-3.7.2-bin && java -jar dubbo-admin-0.7.0-SNAPSHOT.jar" :: 開(kāi)啟第二個(gè)CMD窗口并執(zhí)行命令 start cmd /k "cd F:\enviroment\dubbo-admin-develop\dubbo-admin-ui && npm run dev"
這時(shí)候我們需要輸入登錄賬戶(hù)和密碼,我們都是默認(rèn)的root-root;
登錄成功后,查看界面
15.4SpringBoot + Dubbo + zookeeper
15.4.1框架搭建
1. 啟動(dòng)zookeeper !
2. IDEA創(chuàng)建一個(gè)空項(xiàng)目;
3.創(chuàng)建一個(gè)模塊,實(shí)現(xiàn)服務(wù)提供者:provider-server , 選擇web依賴(lài)即可
4.項(xiàng)目創(chuàng)建完畢,我們寫(xiě)一個(gè)服務(wù),比如賣(mài)票的服務(wù);
編寫(xiě)接口
package com.example.service;public interface TicketService {public String getTicket();
}
編寫(xiě)實(shí)現(xiàn)類(lèi)
package com.example.service;public class TicketServiceImpl implements TicketService {@Overridepublic String getTicket() {return "《狂神說(shuō)Java》";}
}
5.創(chuàng)建一個(gè)模塊,實(shí)現(xiàn)服務(wù)消費(fèi)者:consumer-server , 選擇web依賴(lài)即可
6.項(xiàng)目創(chuàng)建完畢,我們寫(xiě)一個(gè)服務(wù),比如用戶(hù)的服務(wù);
編寫(xiě)service
package com.example.service;public class UserService {//我們需要去拿去注冊(cè)中心的服務(wù)
}
需求:現(xiàn)在我們的用戶(hù)想使用買(mǎi)票的服務(wù),這要怎么弄呢 ?這是兩個(gè)項(xiàng)目,端口都不一樣,所以就需要下面的操作:
15.4.2服務(wù)提供者
1、將服務(wù)提供者注冊(cè)到注冊(cè)中心,我們需要整合Dubbo和zookeeper,所以需要導(dǎo)包
我們從dubbo官網(wǎng)進(jìn)入github,看下方的幫助文檔,找到dubbo-springboot,找到依賴(lài)包
<!-- Dubbo Spring Boot Starter -->
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.3</version>
</dependency>
zookeeper的包我們?nèi)aven倉(cāng)庫(kù)下載,zkclient;
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version>
</dependency>
【新版的坑】zookeeper及其依賴(lài)包,解決日志沖突,還需要剔除日志依賴(lài);
<!-- 引入zookeeper -->
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version>
</dependency>
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>2.12.0</version>
</dependency>
<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.14</version><!--排除這個(gè)slf4j-log4j12--><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions>
</dependency>
2、在springboot配置文件中配置dubbo相關(guān)屬性!
#當(dāng)前應(yīng)用名字
dubbo.application.name=provider-server
#注冊(cè)中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#掃描指定包下服務(wù)
dubbo.scan.base-packages=com.guo.provider.service
3、在service的實(shí)現(xiàn)類(lèi)中配置服務(wù)注解,發(fā)布服務(wù)!注意導(dǎo)包問(wèn)題,因?yàn)檫@里的Service注解需要導(dǎo)入的是dubbo中的注解,而不是spring的注解,所以要把其注入就要用Componet,不過(guò)最新版本的好像已經(jīng)解決這個(gè)問(wèn)題:一個(gè)新的注解@DubboService
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;@Service //將服務(wù)發(fā)布出去
@Component //放在容器中
public class TicketServiceImpl implements TicketService {@Overridepublic String getTicket() {return "《狂神說(shuō)Java》";}
}
邏輯理解 :應(yīng)用啟動(dòng)起來(lái),dubbo就會(huì)掃描指定的包下帶有@component注解的服務(wù),將它發(fā)布在指定的注冊(cè)中心中!
運(yùn)行 zookeeper 和 provider,打開(kāi)監(jiān)控查看(dubbo-admin)
15.4.3服務(wù)消費(fèi)者
1.導(dǎo)入依賴(lài),和之前的依賴(lài)一樣;
<!--dubbo-->
<!-- Dubbo Spring Boot Starter -->
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.3</version>
</dependency>
<!--zookeeper-->
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version>
</dependency>
<!-- 引入zookeeper -->
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version>
</dependency>
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>2.12.0</version>
</dependency>
<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.14</version><!--排除這個(gè)slf4j-log4j12--><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions>
</dependency>
2.配置參數(shù)
server.port=8002
#當(dāng)前應(yīng)用名字
dubbo.application.name=consumer-server
#注冊(cè)中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
3.本來(lái)正常步驟是需要將服務(wù)提供者的接口打包,然后用pom文件導(dǎo)入,我們這里使用簡(jiǎn)單的方式,直接將服務(wù)的接口拿過(guò)來(lái),路徑必須保證正確,即和服務(wù)提供者相同;
- 完善消費(fèi)者的服務(wù)類(lèi)
package com.example.service;import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service; @Service //注意是spring的 而不是 dubbo的
public class UserService {@Reference //遠(yuǎn)程引用指定的服務(wù),他會(huì)按照全類(lèi)名進(jìn)行匹配,看誰(shuí)給注冊(cè)中心注冊(cè)了這個(gè)全類(lèi)名TicketService ticketService;public void buyTicket() {String ticket = ticketService.getTicket();System.out.println("在注冊(cè)中心買(mǎi)到" + ticket);}
}
5.測(cè)試類(lèi)編寫(xiě)
package com.example;import com.example.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class ZookeeperConsumerApplicationTests {@AutowiredUserService userService;@Testvoid contextLoads() {userService.buyTicket();}}
展望未來(lái)
微服務(wù)架構(gòu)問(wèn)題:
分布式架構(gòu)會(huì)遇到的四個(gè)核心問(wèn)題:
1.這么多的服務(wù),客戶(hù)端該如何去訪問(wèn)?
2.這么多的服務(wù),服務(wù)器之間如何進(jìn)行通信?
3.這么多的服務(wù),該如何管理和治理?
4.服務(wù)掛了,怎么辦?
解決方案:
SpringCloud,是一套生態(tài),就是來(lái)解決以上分布式架構(gòu)的四個(gè)問(wèn)題
想使用SpringCloud,必須要掌握Springboot,因?yàn)樗腔赟pirngBoot的
1.SpringCloud NetFlix,出了一套解決方案
2.Apcahe Dubbo zookeeper 第二套解決方案
API:沒(méi)有,要么找第三方,要么自己實(shí)現(xiàn)
Dubbo是一個(gè)高性能的基于java實(shí)現(xiàn)的RPC通信框架
服務(wù)注冊(cè)與發(fā)現(xiàn),zookeeper,沒(méi)有熔斷機(jī)制,借助了Hystrix
3.SpringCloud Alibaba 一站式解決方案!