springboot+dubbo+zk集群搭建

zookeeper的集群搭建在上一編已經(jīng)說(shuō)過(guò)醒第,不會(huì)的可以查看。

下面開(kāi)始搭建springboot+dubbo+zk注冊(cè)中心的demo

生產(chǎn)者工程目錄如圖

image

一舀锨、創(chuàng)建dubbo-provider父工程
一乔遮、創(chuàng)建dubbo-provider父工程

父pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>provider</module>
<module>api</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>
<groupId>springboot</groupId>
<artifactId>dubbo-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

二馋缅、創(chuàng)建provider工程(Module)

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dubbo-provider</artifactId>
<groupId>springboot</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>provider</artifactId>
<dependencies>

<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.6.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>2.12.0</version>
    </dependency>
    <!-- exclusions去掉log4j的依賴逊谋,會(huì)沖突 -->
    <dependency>
        <artifactId>zookeeper</artifactId>
        <groupId>org.apache.zookeeper</groupId>
        <version>3.4.14</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
            <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>springboot</groupId>
        <artifactId>api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

</project>

application.yml配置文件信息
#dubbo的name默認(rèn)使用${spring.application.name}擂达,所以不用配置dubbo.application.name也行
spring:
?application:
??name: dubbo-provider
#使用注解,要配置dubbo的掃描包路徑
dubbo:
?scan:
??base-packages: com.facade
#dubbo啟動(dòng)的端口
?protocol:
??port: 20880
?registry:
??protocol: zookeeper
??address: 192.168.79.135:2181,192.168.79.136:2181,192.168.79.137:2181

定義一個(gè)服務(wù)接口

image

服務(wù)接口的實(shí)現(xiàn)

image

定義服務(wù)接口暴露出去的dubbo實(shí)現(xiàn)(因?yàn)閷?shí)際項(xiàng)目中會(huì)包裝一層facade胶滋,而不會(huì)將service當(dāng)作dubbo接口)

image

二板鬓、創(chuàng)建provider的api工程(Module)

api工程用于給消費(fèi)者工程引用依賴得到api接口來(lái)調(diào)用

pom.xml文件,什么都不用依賴

image

暴露給其他服務(wù)的api接口

image

****最后就是springboot啟動(dòng)服務(wù)的類****

image

生產(chǎn)者工程搭建成功

****消費(fèi)者工程目錄如圖

image

一究恤、創(chuàng)建dubbo-consumer父工程

pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>consumer</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>
<groupId>springboot</groupId>
<artifactId>dubbo-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

application.yml配置文件

#dubbo的name默認(rèn)使用${spring.application.name}俭令,所以不用配置dubbo.application.name也行
spring:
?application:
??name: dubbo-consumer
#dubbo啟動(dòng)的端口
dubbo:
?protocol:
??port: 20881
?registry:
??protocol: zookeeper
??address: 192.168.79.135:2181,192.168.79.136:2181,192.168.79.137:2181
這里用springboot的test來(lái)啟動(dòng)消費(fèi)者來(lái)

image

消費(fèi)者工程搭建成功

現(xiàn)在啟動(dòng)生產(chǎn)者服務(wù)(直接啟動(dòng)springboot的main就可以了)

image

生產(chǎn)者啟動(dòng)成功

啟動(dòng)消費(fèi)者(調(diào)用ConsumerTest測(cè)試)

image

調(diào)用成功,說(shuō)明搭建的springboot+dubbo+zk集群成功了

查詢zk節(jié)點(diǎn)的變化部宿,看看暴露的接口存到注冊(cè)中心的是什么東西

發(fā)現(xiàn)多了dubbo節(jié)點(diǎn)抄腔,并者dubbo節(jié)點(diǎn)的子節(jié)點(diǎn)下有注冊(cè)到zk上的服務(wù)(api接口)名稱 有多少個(gè)服務(wù),dubbo下就有多少個(gè)子節(jié)點(diǎn)

/dubbo/com.api.HelloFacade

image
image

接口節(jié)點(diǎn)上還有providers窟赏,configuartors等節(jié)點(diǎn)

image

查看providers節(jié)點(diǎn)下發(fā)現(xiàn)這一串東西(這是生產(chǎn)者注冊(cè)到zk上的地址)

[dubbo%3A%2F%2F172.16.19.186%3A20880%2Fcom.api.HelloFacade%3Fanyhost%3Dtrue%26application%3Ddubboprovider%26bean.name%3DServiceBean%3Acom.api.HelloFacade%3A1.0.0%26dubbo%3D2.0.2%26generic%3Dfalse%26interface%3Dcom.api.HelloFacade%26methods%3DsayH%26pid%3D11836%26revision%3D1.0.0%26side%3Dprovider%26timestamp%3D1557481294861%26version%3D1.0.0]

百度一下url解碼

[dubbo://172.16.19.186:20880/com.api.HelloFacade?anyhost=true&application=dubboprovider&bean.name=ServiceBean:com.api.HelloFacade:1.0.0&dubbo=2.0.2&generic=false&interface=com.api.HelloFacade&methods=sayH&pid=11836&revision=1.0.0&side=provider&timestamp=1557481294861&version=1.0.0]

dubbo使用zookeeper作為注解中心妓柜,服務(wù)啟動(dòng)后箱季,zk節(jié)點(diǎn)會(huì)創(chuàng)建/dubbo節(jié)點(diǎn)涯穷,然后把在dubbo節(jié)點(diǎn)上創(chuàng)建生產(chǎn)者注冊(cè)到zk的服務(wù)(api接口)名稱/dubbo/com.api.HelloFacade,該節(jié)點(diǎn)下會(huì)保存provider和consumer的節(jié)點(diǎn)藏雏,/dubbo/com.api.HelloFacade/provider節(jié)點(diǎn)(持久節(jié)點(diǎn))下會(huì)保存生產(chǎn)者的地址信息(協(xié)議://ip+port/接口名稱...)拷况,provider節(jié)點(diǎn)下保存的 地址信息(臨時(shí)節(jié)點(diǎn)),生產(chǎn)者關(guān)閉服務(wù)地址節(jié)點(diǎn)就會(huì)被刪除掘殴。

看出這是dubbo協(xié)議的地址赚瘦,我們的配置文件沒(méi)配置dubbo的協(xié)議,說(shuō)明dubbo默認(rèn)使用的就是dubbo協(xié)議奏寨。

消費(fèi)者服務(wù)啟動(dòng)時(shí)就會(huì)HelloFacade的代理對(duì)象

消費(fèi)者調(diào)用dubbo接口的方法時(shí)會(huì)到zk下找到對(duì)應(yīng)接口的生產(chǎn)者地址(172.16.19.186:20880)起意,消費(fèi)者與生產(chǎn)者通過(guò)netty進(jìn)行通信,生產(chǎn)者通過(guò)動(dòng)態(tài)代理和反射機(jī)制把方法執(zhí)行后的返回值通過(guò)netty通訊傳給消費(fèi)者

我們可以看看官網(wǎng)上的圖

0.服務(wù)容器負(fù)責(zé)啟動(dòng)病瞳,加載揽咕,運(yùn)行服務(wù)提供者。

  1. 服務(wù)提供者在啟動(dòng)時(shí)套菜,向注冊(cè)中心注冊(cè)自己提供的服務(wù)亲善。

  2. 服務(wù)消費(fèi)者在啟動(dòng)時(shí),向注冊(cè)中心訂閱自己所需的服務(wù)逗柴。

  3. 注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者蛹头,如果有變更,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。

  4. 服務(wù)消費(fèi)者渣蜗,從提供者地址列表中屠尊,基于軟負(fù)載均衡算法,選一臺(tái)提供者進(jìn)行調(diào)用耕拷,如果調(diào)用失敗知染,再選另一臺(tái)調(diào)用。

  5. 服務(wù)消費(fèi)者和提供者斑胜,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間控淡,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心


    第4步invoke是通過(guò)netty通信進(jìn)行,消費(fèi)者會(huì)生成動(dòng)態(tài)代理類止潘,調(diào)用服務(wù)的方法時(shí)會(huì)請(qǐng)求生產(chǎn)者掺炭,生產(chǎn)者會(huì)通過(guò)invoke調(diào)用方法,然后把返回值傳給消費(fèi)者 (相當(dāng)于消費(fèi)者proxy.newproxyinstance(...)時(shí)凭戴,代理對(duì)象會(huì)觸發(fā)invocationHandler涧狮,invocationHandler接口的實(shí)現(xiàn)中處理與生產(chǎn)者進(jìn)行傳遞消息,生產(chǎn)者把方法調(diào)用后的結(jié)果傳遞給消費(fèi)者)

image

下一編會(huì)對(duì)dubbo的生產(chǎn)者和消費(fèi)者的一些參數(shù)配置和服務(wù)治理的參數(shù)進(jìn)行測(cè)試說(shuō)明么夫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末者冤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子档痪,更是在濱河造成了極大的恐慌涉枫,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腐螟,死亡現(xiàn)場(chǎng)離奇詭異愿汰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)乐纸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門衬廷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人汽绢,你說(shuō)我怎么就攤上這事吗跋。” “怎么了宁昭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵跌宛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我久窟,道長(zhǎng)秩冈,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任斥扛,我火速辦了婚禮入问,結(jié)果婚禮上丹锹,老公的妹妹穿的比我還像新娘。我一直安慰自己芬失,他們只是感情好楣黍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著棱烂,像睡著了一般租漂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颊糜,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天哩治,我揣著相機(jī)與錄音,去河邊找鬼衬鱼。 笑死业筏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸟赫。 我是一名探鬼主播蒜胖,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抛蚤!你這毒婦竟也來(lái)了台谢?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤岁经,失蹤者是張志新(化名)和其女友劉穎朋沮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒿偎,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朽们,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诉位。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡菜枷,死狀恐怖苍糠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情啤誊,我是刑警寧澤岳瞭,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蚊锹,受9級(jí)特大地震影響瞳筏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牡昆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一姚炕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦柱宦、人聲如沸些椒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)免糕。三九已至,卻和暖如春忧侧,著一層夾襖步出監(jiān)牢的瞬間石窑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工蚓炬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尼斧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓试吁,卻偏偏與公主長(zhǎng)得像棺棵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熄捍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容