SpringBoot 集成 dubbo

背景:為了學(xué)習(xí) dubbo 的集成戒祠,先在自己電腦上嘗試了一把弥臼,鼓搗一天绿渣,終于配置成功朝群。首先我創(chuàng)建了兩個(gè) SpringBoot 項(xiàng)目,一個(gè)扮演 provider中符,一個(gè)扮演 consumer姜胖,還創(chuàng)建了一個(gè) maven 項(xiàng)目,扮演公共接口角色舟茶。另外谭期,dubbo 需要有一個(gè)注冊(cè)中心,所以集成 dubbo([dubbo 官網(wǎng)]吧凉,[dubbo 官方 SpringBoot 指南]) 之前隧出,需要在電腦上安裝 zookeeper([zookeeper 官網(wǎng)])。dubbo 的注冊(cè)中心支持多種協(xié)議阀捅,zookeeper 只是其中一種胀瞪,而且它只是協(xié)議,所以還需要有實(shí)現(xiàn)了該協(xié)議的客戶端饲鄙,dubbo 支持 zkclient 和 curator 兩種客戶端凄诞,但是對(duì)后者是從 2.3.0 才開始支持的。不過忍级,SpringBoot 下這些客戶端的集成就不用我們考慮了帆谍。
工具說明:Mac + brew(可選) + IDEA + Maven + zookeeper。
下邊開始轴咱。

1. 安裝 zookeeper

兩種方式:可以去 zookeeper 官網(wǎng)下載壓縮包汛蝙,或者 brew install zookeeper烈涮。我是用的后者。安裝完成之后窖剑,brew info zookeeper 查看 zookeeper 的安裝信息坚洽,cd 到 zookeeper 的目錄,在 bin 文件夾下西土,有 zkService 腳本文件讶舰,命令行運(yùn)行,會(huì)看到如下結(jié)果:

?  bin zkServer
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

它提示我們使用 ./zkServer + {} 中的命令需了。我們可以試一下跳昼,命令行中輸入 ./zkServer status,會(huì)看到:

?  bin ./zkServer status
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Error contacting service. It is probably not running.

提示我們未運(yùn)行肋乍。那就使用 ./zkServer start庐舟,然后會(huì)看到:

?  bin ./zkServer start
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED

運(yùn)行成功。
這里還有重要的一點(diǎn)住拭,關(guān)于 zookeeper 的配置。其實(shí)之前的命令中历帚,zookeeper 已經(jīng)提醒我們了:

Using config: /usr/local/etc/zookeeper/zoo.cfg

即使用的配置文件為 zoo.cfg滔岳。打開這個(gè)文件,我們會(huì)看到里邊:

#The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/var/run/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
....

給我的感覺挽牢,zookeeper 的配置有點(diǎn)類似于處理器的時(shí)鐘頻率谱煤,先定義了一個(gè) tick 耗費(fèi)的時(shí)間,下邊根據(jù) tick 的定義了初始化時(shí)為了同步需要耗費(fèi)的時(shí)間禽拔,請(qǐng)求發(fā)出與響應(yīng)的間隔時(shí)間刘离。不過現(xiàn)在對(duì)于我們運(yùn)行 demo 比較重要的就是最下邊的端口號(hào),因?yàn)楹筮?provider 和 consumer 在進(jìn)行注冊(cè)的時(shí)候睹栖,需要 ip 地址和端口才能成功注冊(cè)硫惕。當(dāng)然,因?yàn)?zookeeper 是運(yùn)行在本機(jī)的野来,所以 ip 地址就是 127.0.0.1恼除。

2. 引入 dubbo 依賴

zookeeper 成功運(yùn)行起來之后,我們就可以開始項(xiàng)目的配置了曼氛。在 provider 和 consumer 的兩個(gè)項(xiàng)目的 pom 文件中豁辉,分別加入

        <!-- 引入 dubbo -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

同時(shí)將 maven 設(shè)置成自動(dòng)導(dǎo)入,然后在 External Libraries 中我們就可以看到 dubbo 的包已經(jīng)成功引入舀患。

3. 配置 dubbo

雖然 dubbo 的官方文檔沒有提到在 application.properties 配置徽级,但是其 github 上 SpringBoot 工程配置指南中卻提到了。我試過在 classpath 路徑下創(chuàng)建 dubbo.properties 文件進(jìn)行配置聊浅,運(yùn)行也沒問題餐抢,不過沒有提示现使,應(yīng)該是我哪一塊配置的不對(duì),不過在 application.properties 中配置就會(huì)有提示弹澎,所以最后我還是在 application.properties 中配置的朴下。主要的配置項(xiàng)目有:

#設(shè)置服務(wù)提供者的信息 以下信息必須配置
#直接使用工程名稱即可
dubbo.application.id=ConsumerService
dubbo.application.name=ConsumerService
#注冊(cè)中心的 ip 地址及端口號(hào)
dubbo.registry.address=127.0.0.1:2181
#注冊(cè)中心的協(xié)議類型
dubbo.registry.protocol= zookeeper

其他的配置可以參見官網(wǎng)說明,如果需要自行配置苦蒿。

4. 配置 provider 和 consumer

4.1 開啟 dubbo 注解配置

都在工程的注 application 文件中開啟 dubbo 的注解配置殴胧。即在 @SpringBootApplication 上方添加:@EnableDubbo。

4.2 配置 provider

在 provider 類的聲明頭部佩迟,添加 @Service 注解团滥,表明該類是 service 的提供類。

// 注意這里的 @Service 不要選擇成 Spring 框架的那個(gè)报强!是 alibaba.dubbo 的那個(gè)灸姊。
@Service
public class ProviderServiceClass implements CommonInterface {
    @Override
    public List<String> getDataFromProvider() {
        List<String> addrList = new ArrayList<String>();
        addrList.add("北京市海淀區(qū)");
        return addrList;
    }
}

4.3 配置 consumer

在 consumer 類中,我們一般會(huì)定義一個(gè) CommonInterface 接口類型的私有變量秉溉,下邊在返回?cái)?shù)據(jù)的時(shí)候我們直接調(diào)用 CommonInterface 的方法力惯,運(yùn)行時(shí) dubbo 自動(dòng)會(huì)將該私有變量鏈接成 provider 對(duì)象。配置完之后大概是這個(gè)樣子:

@RestController
public class ConsumerServiceClass {

    @Reference
    private CommonInterface interInstance;

    @RequestMapping("/someAddress")
    public List<String> getData() {
        return interInstance.getDataFromProvider();
    }
}

5. 啟動(dòng)項(xiàng)目并驗(yàn)證

分別啟動(dòng)兩個(gè)項(xiàng)目召嘶,然后在瀏覽器中請(qǐng)求本機(jī)地址 /someAddress 父晶,這時(shí)會(huì)看到成功返回 "北京市海淀區(qū)" 。至此弄跌,SpringBoot 項(xiàng)目集成 dubbo 最簡(jiǎn)單的集成即已完成甲喝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市铛只,隨后出現(xiàn)的幾起案子埠胖,更是在濱河造成了極大的恐慌,老刑警劉巖淳玩,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件直撤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凯肋,警方通過查閱死者的電腦和手機(jī)谊惭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侮东,“玉大人圈盔,你說我怎么就攤上這事∏难牛” “怎么了驱敲?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)宽闲。 經(jīng)常有香客問我众眨,道長(zhǎng)握牧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任娩梨,我火速辦了婚禮沿腰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狈定。我一直安慰自己颂龙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布纽什。 她就那樣靜靜地躺著措嵌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芦缰。 梳的紋絲不亂的頭發(fā)上企巢,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音让蕾,去河邊找鬼浪规。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔗喂,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼胳岂,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了找御?” 一聲冷哼從身側(cè)響起元镀,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霎桅,沒想到半個(gè)月后栖疑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滔驶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年遇革,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揭糕。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萝快,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出著角,到底是詐尸還是另有隱情揪漩,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布吏口,位于F島的核電站奄容,受9級(jí)特大地震影響冰更,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昂勒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一蜀细、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧戈盈,春花似錦奠衔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至血柳,卻和暖如春官册,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背难捌。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工膝宁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人根吁。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓员淫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親击敌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子介返,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)沃斤,斷路器圣蝎,智...
    卡卡羅2017閱讀 134,693評(píng)論 18 139
  • 1、準(zhǔn)備 在分析探索Dubbo架構(gòu)原理之前衡瓶,我們需要準(zhǔn)備一下環(huán)境徘公,用于后面我們來分析dubbo的架構(gòu)。 1.1 Z...
    墨淵丶閱讀 2,606評(píng)論 1 20
  • springboot與dubbo的集成是非常簡(jiǎn)單的哮针。dubbo是專門為分布式開發(fā)而創(chuàng)建的关面。其核心有四個(gè):服務(wù)提供者...
    青橙_7f88閱讀 1,340評(píng)論 0 0
  • 雪,已離開天空了十厢。 草地上等太,只看見參差的片片雪塊, 與綠草地綢繆著蛮放。 像旺旺雪餅上白色糖點(diǎn)澈驼。 六天前,雪點(diǎn)筛武、雪點(diǎn) ...
    愷然閱讀 336評(píng)論 33 11
  • 【明星做葆嬰】 我向來不追劇不追星缝其,年輕時(shí)候不追挎塌,年紀(jì)大了更不追[捂臉],這個(gè)演員你們認(rèn)識(shí)嗎内边? 來來來榴都,今天我來爆...
    暖心滴果兒媽閱讀 599評(píng)論 0 0