文章目录
- 0. 引言
- 1. nacos简介及安装
- 2. 注册中心实现
- 3. 配置中心实现
- 4. 源码
- 5. 总结
0. 引言
之前我们讲解的是dubbo+zookeeper体系来实现微服务框架,但相对zookeeper很多企业在使用nacos, 并且nacos和dubbo都是阿里出品,所以具备一些天生的契合性,所以今天我们来讲解dubbo如何整合nacos实现服务注册、配置
首先如果对于dubbo完全没有概念的同学,可以先学习下之前的文章再继续观看本文:
从零理解及搭建dubbo微服务框架(一)
1. nacos简介及安装
之前文章中已经介绍过nacos, 这里不再累述,大家可以参考文章:
springcloud:注册中心、配置中心组件nacos详解
2. 注册中心实现
1、我们先创建两个springboot项目user-server
和order-server
,将作为user-server
作为dubbo服务的提供者,order-server
作为消费者,通过dubbo调用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实现服务注册与发现-->
<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: 8081
spring:
application:
name: user-server-nacos
dubbo:
application:
name: ${spring.application.name}
protocol: # 指定通信规则
name: dubbo # 通信协议
port: -1 # dubbo协议端口,以供消费者访问,-1即为随机端口
registry: # 注册中心
id: nacos-registry
address: nacos://localhost:8848
4、为了让我们的接口能被order-server更好的调用,我们先创建一个server-api模块,用于声明提供者的接口服务:
(1)创建一个maven空项目
(2)创建一个UserService
接口,用于声明user-server提供者接口
(3)在user-server中添加该模块的pom依赖
<dependency>
<groupId>wu.example</groupId>
<artifactId>service-api</artifactId>
<version>${parent.version}</version>
</dependency>
5、在user-server中创建UserServiceImpl
类,用于书写具体的提供服务,注意该类用@DubboService
注解标注为dubbo服务类,并且声明UserService
@DubboService
public class UserServiceImpl implements UserService {
@Override
public String getUserById(Integer id){
return "nacos用户" + id;
}
}
6、因为user-server是提供者,所以其启动类上要额外添加@EnableDubbo
注解
7、提供者的操作就处理完成了,我们将其启动,如果发现启动报错,可以根据报错信息具体排查
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实现服务注册与发现-->
<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: 8082
spring:
application:
name: order-server-nacos
dubbo:
application:
name: ${spring.application.name}
protocol: # 指定通信规则
name: dubbo # 通信协议
port: -1 # dubbo协议端口,以供消费者访问,-1即为随机端口
registry: # 注册中心
id: nacos-registry
address: nacos://localhost:8848
9、在order-server中创建OrderController
类,用于模拟调用user-server
,注意引入dubbo提供者服务需要用@DubboReference
注解
@RestController
public class OrderController {
@DubboReference
private 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、我们调用下orderController的接口,来验证下
如上图,可以看到order-server的服务正常调用到user-server提供的服务了,说明dubbo通信正常,我们的搭建即成功了
3. 配置中心实现
1、在dubbo项目中接入nacos实现配置中心实际上和springcloud是一样的,可参考
springcloud:注册中心、配置中心组件nacos详解
2、这里我们在order-server项目中简单示意下,引入config依赖
<!--集成Nacos实现动态配置管理-->
<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: nacos
password: nacos
# 文件名 如果没有配置则默认为服务名,即spring.appliction.name
prefix: order-server-nacos
#指定文件后缀,默认properties
file-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、调用测试,可以看到nacos上的配置项成果拿到了
6、更多关于nacos配置中心的使用,大家可以参考上述列举的文章
4. 源码
文中源码,可在https://gitee.com/wuhanxue/dubbo_wu_demo下载
5. 总结
本章节中我们讲解了dubbo集成nacos实现注册中心、配置中心的操作,后续我们将继续讲解dubbo框架集成网关的多种方案,大家有兴趣可关注专栏