背景:為了學(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)單的集成即已完成甲喝。