SpringBoot 集成 dubbo

背景:為了學(xué)習(xí) dubbo 的集成,先在自己電腦上嘗試了一把,鼓搗一天,終于配置成功。首先我創(chuàng)建了兩個 SpringBoot 項目,一個扮演 provider,一個扮演 consumer,還創(chuàng)建了一個 maven 項目,扮演公共接口角色。另外,dubbo 需要有一個注冊中心,所以集成 dubbo([dubbo 官網(wǎng)][dubbo 官方 SpringBoot 指南]) 之前,需要在電腦上安裝 zookeeper([zookeeper 官網(wǎng)])。dubbo 的注冊中心支持多種協(xié)議,zookeeper 只是其中一種,而且它只是協(xié)議,所以還需要有實現(xiàn)了該協(xié)議的客戶端,dubbo 支持 zkclient 和 curator 兩種客戶端,但是對后者是從 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 腳本文件,命令行運行,會看到如下結(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,會看到:

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

提示我們未運行。那就使用 ./zkServer start,然后會看到:

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

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

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

即使用的配置文件為 zoo.cfg。打開這個文件,我們會看到里邊:

#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 的配置有點類似于處理器的時鐘頻率,先定義了一個 tick 耗費的時間,下邊根據(jù) tick 的定義了初始化時為了同步需要耗費的時間,請求發(fā)出與響應(yīng)的間隔時間。不過現(xiàn)在對于我們運行 demo 比較重要的就是最下邊的端口號,因為后邊 provider 和 consumer 在進行注冊的時候,需要 ip 地址和端口才能成功注冊。當(dāng)然,因為 zookeeper 是運行在本機的,所以 ip 地址就是 127.0.0.1。

2. 引入 dubbo 依賴

zookeeper 成功運行起來之后,我們就可以開始項目的配置了。在 provider 和 consumer 的兩個項目的 pom 文件中,分別加入

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

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

3. 配置 dubbo

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

#設(shè)置服務(wù)提供者的信息 以下信息必須配置
#直接使用工程名稱即可
dubbo.application.id=ConsumerService
dubbo.application.name=ConsumerService
#注冊中心的 ip 地址及端口號
dubbo.registry.address=127.0.0.1:2181
#注冊中心的協(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 框架的那個!是 alibaba.dubbo 的那個。
@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 類中,我們一般會定義一個 CommonInterface 接口類型的私有變量,下邊在返回數(shù)據(jù)的時候我們直接調(diào)用 CommonInterface 的方法,運行時 dubbo 自動會將該私有變量鏈接成 provider 對象。配置完之后大概是這個樣子:

@RestController
public class ConsumerServiceClass {

    @Reference
    private CommonInterface interInstance;

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

5. 啟動項目并驗證

分別啟動兩個項目,然后在瀏覽器中請求本機地址 /someAddress ,這時會看到成功返回 "北京市海淀區(qū)" 。至此,SpringBoot 項目集成 dubbo 最簡單的集成即已完成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容