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