好的建筑設(shè)計(jì)網(wǎng)站推薦/app制作一個(gè)需要多少錢
文章目錄
- 0. 引言
- 1. nacos簡(jiǎn)介及安裝
- 2. 注冊(cè)中心實(shí)現(xiàn)
- 3. 配置中心實(shí)現(xiàn)
- 4. 源碼
- 5. 總結(jié)
0. 引言
之前我們講解的是dubbo+zookeeper體系來(lái)實(shí)現(xiàn)微服務(wù)框架,但相對(duì)zookeeper很多企業(yè)在使用nacos, 并且nacos和dubbo都是阿里出品,所以具備一些天生的契合性,所以今天我們來(lái)講解dubbo如何整合nacos實(shí)現(xiàn)服務(wù)注冊(cè)、配置
首先如果對(duì)于dubbo完全沒(méi)有概念的同學(xué),可以先學(xué)習(xí)下之前的文章再繼續(xù)觀看本文:
從零理解及搭建dubbo微服務(wù)框架(一)
1. nacos簡(jiǎn)介及安裝
之前文章中已經(jīng)介紹過(guò)nacos, 這里不再累述,大家可以參考文章:
springcloud:注冊(cè)中心、配置中心組件nacos詳解
2. 注冊(cè)中心實(shí)現(xiàn)
1、我們先創(chuàng)建兩個(gè)springboot項(xiàng)目user-server
和order-server
,將作為user-server
作為dubbo服務(wù)的提供者,order-server
作為消費(fèi)者,通過(guò)dubbo調(diào)用user-server
的接口服務(wù)
2、在user-server項(xiàng)目中,引入依賴
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.1.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.7.RELEASE</version></dependency><!--集成Nacos實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.2.RELEASE</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.0.3</version></dependency>
注意這里要單獨(dú)引入下nacos-client
的依賴,其版本與你安裝的nacos版本保持一致,否則會(huì)導(dǎo)致各種NoClassDefFoundError
錯(cuò)誤,或者你也可以提高spring-cloud-starter-alibaba-nacos-discovery
和spring-cloud-starter-alibaba-nacos-config
對(duì)應(yīng)的版本,讓其中包含的nacos-client
接近你安裝的版本
3、修改配置文件application.yml
# 應(yīng)用服務(wù) WEB 訪問(wèn)端口
server:port: 8081spring:application:name: user-server-nacosdubbo:application:name: ${spring.application.name}protocol: # 指定通信規(guī)則name: dubbo # 通信協(xié)議port: -1 # dubbo協(xié)議端口,以供消費(fèi)者訪問(wèn),-1即為隨機(jī)端口registry: # 注冊(cè)中心id: nacos-registryaddress: nacos://localhost:8848
4、為了讓我們的接口能被order-server更好的調(diào)用,我們先創(chuàng)建一個(gè)server-api模塊,用于聲明提供者的接口服務(wù):
(1)創(chuàng)建一個(gè)maven空項(xiàng)目
(2)創(chuàng)建一個(gè)UserService
接口,用于聲明user-server提供者接口
(3)在user-server中添加該模塊的pom依賴
<dependency><groupId>wu.example</groupId><artifactId>service-api</artifactId><version>${parent.version}</version></dependency>
5、在user-server中創(chuàng)建UserServiceImpl
類,用于書寫具體的提供服務(wù),注意該類用@DubboService
注解標(biāo)注為dubbo服務(wù)類,并且聲明UserService
@DubboService
public class UserServiceImpl implements UserService {@Overridepublic String getUserById(Integer id){return "nacos用戶" + id;}}
6、因?yàn)閡ser-server是提供者,所以其啟動(dòng)類上要額外添加@EnableDubbo
注解
7、提供者的操作就處理完成了,我們將其啟動(dòng),如果發(fā)現(xiàn)啟動(dòng)報(bào)錯(cuò),可以根據(jù)報(bào)錯(cuò)信息具體排查
8、在order-server
項(xiàng)目中,引入依賴,需要注意order-server也引入了service-api
模塊
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.7.RELEASE</version></dependency><dependency><groupId>wu.example</groupId><artifactId>service-api</artifactId><version>${parent.version}</version></dependency><!-- dubbo client dependencies --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.1.2</version></dependency><!--集成Nacos實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.2.RELEASE</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.0.3</version></dependency>
9、修改order-server配置文件
# 應(yīng)用服務(wù) WEB 訪問(wèn)端口
server:port: 8082spring:application:name: order-server-nacosdubbo:application:name: ${spring.application.name}protocol: # 指定通信規(guī)則name: dubbo # 通信協(xié)議port: -1 # dubbo協(xié)議端口,以供消費(fèi)者訪問(wèn),-1即為隨機(jī)端口registry: # 注冊(cè)中心id: nacos-registryaddress: nacos://localhost:8848
9、在order-server中創(chuàng)建OrderController
類,用于模擬調(diào)用user-server
,注意引入dubbo提供者服務(wù)需要用@DubboReference
注解
@RestController
public class OrderController {@DubboReferenceprivate UserService userService;@GetMapping("createOrder")public String createOrder(Integer id){String userName = userService.getUserById(id);return userName + " createOrder success";}
}
10、啟動(dòng)order-server, 一定要先啟動(dòng)服務(wù)提供者user-server,再啟動(dòng)消費(fèi)者order-server
11、觀察nacos管理界面,可以看到user-server和order-server,以及具體的提供者服務(wù)UserService即說(shuō)明啟動(dòng)正常
12、我們調(diào)用下orderController的接口,來(lái)驗(yàn)證下
如上圖,可以看到order-server的服務(wù)正常調(diào)用到user-server提供的服務(wù)了,說(shuō)明dubbo通信正常,我們的搭建即成功了
3. 配置中心實(shí)現(xiàn)
1、在dubbo項(xiàng)目中接入nacos實(shí)現(xiàn)配置中心實(shí)際上和springcloud是一樣的,可參考
springcloud:注冊(cè)中心、配置中心組件nacos詳解
2、這里我們?cè)趏rder-server項(xiàng)目中簡(jiǎn)單示意下,引入config依賴
<!--集成Nacos實(shí)現(xiàn)動(dòng)態(tài)配置管理--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.2.RELEASE</version></dependency>
添加配置文件bootstrap.yaml
,注意不要在application.yml
中添加配置:
spring:cloud:nacos:config:server-addr: localhost:8848# 命名空間ID,默認(rèn)為public命名空間,省略不寫,命名空間ID在nacos-命名空間頁(yè)面可以看到namespace:username: nacospassword: nacos# 文件名 如果沒(méi)有配置則默認(rèn)為服務(wù)名,即spring.appliction.nameprefix: order-server-nacos#指定文件后綴,默認(rèn)propertiesfile-extension: yaml
3、在nacos配置管理中新建對(duì)應(yīng)的配置文件,注意其命名格式為${prefix}-${spring.profile-active}.${file-extension}
4、在接口中直接引用該配置項(xiàng)
@Value("${user.age}")private Integer userAge;@Value("${user.name}")private String userName;@GetMapping("getUser")public String getUser(){return "用戶信息為:name="+userName+",age="+userAge;}
5、調(diào)用測(cè)試,可以看到nacos上的配置項(xiàng)成果拿到了
6、更多關(guān)于nacos配置中心的使用,大家可以參考上述列舉的文章
4. 源碼
文中源碼,可在https://gitee.com/wuhanxue/dubbo_wu_demo下載
5. 總結(jié)
本章節(jié)中我們講解了dubbo集成nacos實(shí)現(xiàn)注冊(cè)中心、配置中心的操作,后續(xù)我們將繼續(xù)講解dubbo框架集成網(wǎng)關(guān)的多種方案,大家有興趣可關(guān)注專欄