現(xiàn)在越來越多的公司開發(fā)項(xiàng)目中使用了springboot作為搭建服務(wù)的框架,因?yàn)閟pringboot集成了一套完整項(xiàng)目所需要的基本的開發(fā)工具的jar包,無需再像之前開發(fā)一個(gè)spring項(xiàng)目中需要引入各種配置,只需要引入簡單的幾個(gè)配置就能達(dá)到項(xiàng)目的啟動,大大減少了開發(fā)周期,使開發(fā)越來越便捷,而dubbo是一款國內(nèi)使用較多的SOA架構(gòu)開發(fā)的中間件,其主要由三個(gè)部分組成:生產(chǎn)者,消費(fèi)者,注冊中心。注冊中心一般使用的是zookeeper。于是我們從頭來捋一捋如何搭建一個(gè)springboot+dubbo項(xiàng)目。
首先,使用創(chuàng)建一個(gè)springboot項(xiàng)目,我這里使用的是IDEA工具,如果是使用eclipse的同學(xué),大家可以去網(wǎng)上找有很多的搭建springboot項(xiàng)目的博客。
第一步:選擇新建project或者module,在界面中選擇Spring Initilazr點(diǎn)擊next:
第二步:填上項(xiàng)目的基本信息點(diǎn)擊next:

第三步:選擇在你的項(xiàng)目中需要引入的相關(guān)依賴以及springboot的版本,這里我選了2.0.6并勾選web便于測試(當(dāng)然你可以根據(jù)你的需要勾選不同的依賴,很全基本上涵蓋了開發(fā)過程中所用到的所有插件)點(diǎn)擊next編輯器就會幫你自動將項(xiàng)目初始化并下載相關(guān)的jar包依賴:
進(jìn)入項(xiàng)目后我們可以先看看項(xiàng)目結(jié)構(gòu):
其中DemoApplication是項(xiàng)目的啟動類,application.properties是配置文件,項(xiàng)目的一些相關(guān)的配置可以寫在里面,springboot支持多種配置文件格式,目前比較常用的除了properties配置之外,比較流行的是yml格式的配置文件,這里我就將application.properties文件改成application.yml為配置文件格式,都o(jì)k了之后呢我們就可以啟動啟動類(啟動類帶有main方法可以直接啟動),項(xiàng)目就可以啟動了。
第四步:下載安裝zookeeper
- 下載zookeeper注冊中心,下載地址:http://www.apache.org/dyn/closer.cgi/zookeeper/ 下載后解壓即可,進(jìn)入D:\apach-zookeeper-3.4.5\bin,
雙擊zkServer.cmd啟動注冊中心服務(wù)。
雙擊 zkServer.cmd,發(fā)現(xiàn)dos框一閃而過,無法正確啟動zookeeper。
右鍵編輯 zkServer.cmd

在末尾輸入pause ,保存退出。
再次運(yùn)行zkServer.cmd,發(fā)現(xiàn)dos命令行窗口靜止了。

現(xiàn)在能看到錯(cuò)誤提示了,發(fā)現(xiàn)提示 JAVA_HOME 沒有被正確設(shè)置。

此時(shí)檢查自己的 JAVA_HOME設(shè)置情況,發(fā)現(xiàn) JAVA_HOME是正確設(shè)置的,那是怎么回事?
右鍵編輯zkEnv.cmd

在這兩處添加雙引號,保存退出。

重新運(yùn)行zkServer.cmd,OK,zkServer正常啟動了!

第五步:引入Springboot集成dubbo的依賴以及zookeeper客戶端依賴:
<!-- 整合dubbo -->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>
<!-- zookeeper客戶端 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.7</version>
</dependency>
第六步:創(chuàng)建接口及接口實(shí)現(xiàn)類:
public interface TestService {
void testDubbo();
}
import com.alibaba.dubbo.config.annotation.Service;
import com.springboot.dubbo.service.TestService;
@Service(version = "1.0.0",timeout = 3000)
public class TestServiceImpl implements TestService{
@Override
public void testDubbo() {
}
}
添加@Service注解,切記注解不是用spring的service注解,是 com.alibaba.dubbo.config.annotation.Service,由阿里提供的dubbo的注解,配上版本號1.0.0說明向zookeeper注冊的是版本為1.0.0的TestService接口,超時(shí)時(shí)長為3000ms等信息。
第七步:添加配置:
server:
port: 8080 #Tomcat端口
spring:
dubbo:
application:
name: springboot-dubbo-demo #應(yīng)用名
registry:
address: zookeeper://localhost #zookeeper地址
port: 2181 #提供注冊的端口
protocol:
name: dubbo
port: 20890 #dubbo服務(wù)暴露的端口
scan: com.springboot.dubbo.service.impl #掃描的包名
添加完畢后啟動項(xiàng)目,沒有異常的話,可以通過dubbo-admin查看接口情況:
這樣一個(gè)提供者服務(wù)就搭建好了。
第八步:搭建消費(fèi)者服務(wù):
項(xiàng)目創(chuàng)建步驟如上面步驟,引入提供者服務(wù)的依賴,需要使用maven install命令將提供者服務(wù)依賴安裝至本地,或者使用maven deploy命令提交至遠(yuǎn)程服務(wù)器才能正常引入,否則會包依賴包找不到。
添加controller層代碼項(xiàng)目整體結(jié)構(gòu)如圖:

TestController類中的代碼結(jié)構(gòu)使用服務(wù)注入時(shí)使用dubbo的Reference注解:
@Reference(version = "1.0.0",timeout = 300)
private TestService testService;
spring:
dubbo:
application:
name: springboot-dubbo-demo
registry:
address: zookeeper://localhost
port: 2181
scan: com.springboot.dubbo.test.controller
將配置文件掃描的包改成com.springboot.dubbo.test,然后啟動項(xiàng)目
通過阿里的Reference這個(gè)注解,就可以將消費(fèi)者注冊到zookeeper上就能實(shí)現(xiàn)調(diào)用啦。
查看dubbo的服務(wù)可以看到一個(gè)提供者一個(gè)消費(fèi)者: