springboot+dubbo+zk集群搭建

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

下面開始搭建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接口來調(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來啟動(dòng)消費(fè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)用成功,說明搭建的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é)議的地址,我們的配置文件沒配置dubbo的協(xié)議,說明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)者通過netty進(jìn)行通信,生產(chǎn)者通過動(dòng)態(tài)代理和反射機(jī)制把方法執(zhí)行后的返回值通過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是通過netty通信進(jìn)行,消費(fèi)者會(huì)生成動(dòng)態(tài)代理類,調(diào)用服務(wù)的方法時(shí)會(huì)請(qǐng)求生產(chǎn)者,生產(chǎn)者會(huì)通過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è)試說明。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,196評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,456評(píng)論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,955評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,195評(píng)論 0 287
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,725評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,608評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,802評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,048評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評(píng)論 1 281
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,424評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,762評(píng)論 2 372

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