SpringCloud Alibaba Nacos
SpringCloud Alibaba Nacos
Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理 平台
参考文档如下👇
Nacos 官网文档地址:https://nacos.io/zh-cn/docs/what-is-nacos.html
Nacos Spring Cloud 快速开始:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
Nacos 搭建
根据 Nacos 官网的版本选择描述中,可以根据 releases 中找到每个版本的介绍,Spring Cloud 版本对应关系可以查看 版本说明Wiki
获取 Nacos
启动、关闭服务
Linux/Unix/Mac
# Linux/Unix/Mac
# 启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
sh shutdown.sh
Window
# 启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
shutdown.cmd
访问 Nacos 后台界面
当我们的 Nacos 运行起来时,我们可以访问 http://127.0.0.1:8848/nacos 地址,输入账号密码:nacos
登录系统
环境说明
提示
Spring Cloud: 2020.0.3
Nacos: 14.2
spring-cloud-alibaba: 2021.1
关于 Nacos Spring Cloud 的详细文档请参看:Nacos Config 和 Nacos Discovery。
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
服务发现是什么
服务提供者与服务消费者
- 服务提供者:服务的被调用方(即:为其他微服务提供接口的微服务)
- 服务消费者:服务的调用方(即:调用其他微服务接口的微服务)
服务发现原理
- 服务发现机制就是通过一个中间件去记录服务提供者的ip地址,服务名以及心跳等数据(比如用mysql去存储这些信息),然后服务消费者会去这个中间平台去查询相关信息,然后再去访问对应的地址,这就是服务注册和服务发现。
- 当用户地址发生了变化也没有影响,因为服务提供方修改了用户地址,在中间件中会被更新,当服务消费方去访问中间件时就能及时获取最新的用户地址,就不会出现用户地址发生变化导致服务找不到
启动服务发现
我们通过 spring-cloud-starter-alibaba-nacos-discovery 来实现服务注册和发现
注意
注意:如果你的 Spring Cloud 版本是 2020,那么 配置文件 bootstrap.yml 将会不起作用,会导致 nacos 的配置管理、服务发现等配置失效,需要添加依赖,详细方案请看 Spring Cloud 趟坑记录
添加依赖
<!-- nacos 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
更多版本对应关系参考:版本说明 Wiki
添加配置
通过 Nacos 的服务注册发现功能将其服务注册到 Nacos server 上
在 bootstrap.yml
中配置 Nacos server 的地址
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: mall-order
注意:需要配置 application.name 属性,因为 Nacos 注册服务默认取 ${spring.application.name} 的值
添加注解
早期在启动类上需要加上 @EnableDiscoveryClient注解,现在已经可以不需要加了
启动配置管理
我们通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更
添加依赖
<!-- nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
更多版本对应关系参考:版本说明 Wiki
添加配置
在 bootstrap.properties
中配置 Nacos server 的地址和应用名
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
application:
name: mall-order
提示
说明:之所以需要配置 spring.application.name
,是因为它是构成 Nacos 配置管理 dataId
字段的一部分
dataId =
- prefix: 默认为
spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。 - spring.profiles.active: 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符
-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
- file-exetension: 为配置内容的数据格式,可以通过配置项
spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
即,采用上述配置,
nacosconfig
会从 Nacos Server 读取 Data Id 为nacosconfig.yaml
的配置。
Nacos 控制台添加配置文件
在 Nacos 控制台添加一个新的配置,其中:
- Data Id:
nacosconfig
- Group:
DEFAULT_GROUP
- 配置格式:
YAML
读取 Nacos 变量配置
@RefreshScope
@RestController
public class ConfigController {
private static final Logger logger = LoggerFactory.getLogger(ConfigController.class);
@Value("${order.name:test}")
private String name;
@RequestMapping(value = "/config", method = RequestMethod.GET)
public String index() {
logger.info("get order config value from nacos: {}", name);
return name;
}
}
- RefreshScope: 实现配置自动更新,在 nacos 中修改了配置,会动态更新数据