服务注册和配置中心使用之Nacos
一、Nacos
1.1 Nacos介绍
Nacos 是阿里提供的组件, 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助实现动态服务发现、服务配置管理、服务及流量管理。
1.2 安装 Nacos
这里我们采用 Docker 形式安装:
# 拉取镜像
docker pull nacos/nacos-server
# 创建容器
docker run --name nacos -d -p 8848:8848 -e MODE=standalone nacos/nacos-server
访问[http://192.168.205.10:8848/nacos] ,输入用户名/密码 nacos/nacos
,就进入nacos 的控制台了:
二、Nacos应用
2.1 注册中心应用
- 新建 nacos-client 模块 添加相关依赖:
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.0.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 在配置文件
resources/application. yml
中添加相关配置:
server:
# 指定运行端口
port: 8800
spring:
application:
# 指定服务名称
name: nacos-client
cloud:
nacos:
discovery:
server-addr: 192.168.205.10:8848
management:
endpoint:
health:
# 显示应用健康信息
show-details: always
endpoints:
web:
exposure:
include: "*"
- 在启动类上添加 @EnableDiscoveryClient 注解
@EnableDiscoveryClient
@SpringBootApplication
public class NacosClientApplication {
public static void main(String[] args) {
SpringApplication.run(NacosClientApplication.class, args);
}
}
4) 启动项目,查看 nacos 控制台服务列表
2.2 配置中心应用
- 新建 nacos-config 模块 添加相关依赖:
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.0.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
- 新建 bootstrap.yml 配置文件
server:
# 指定运行端口
port: 8800
spring:
application:
# 指定服务名称
name: nacos-config
cloud:
nacos:
config:
# 设置配置中心地址
server-addr: 192.168.205.10:8848
# 设置配置文件后缀
file-extension: yaml
注:bootstrap.yml 先于 application.yml 加载,所以需要在这个文件中配置
- 新建 Config 类,用于读取注册中心配置属性
@Component
// @RefreshScope 注解可以实现动态刷新属性
@RefreshScope
public class Config {
// : 后面的值,表示默认缺省值
@Value("${name:}")
private String name;
@Value("${age:0}")
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
4) 新建 HelloController 用于获取配置值
@RestController
public class HelloController {
@Autowired
private Config config;
@GetMapping("/getConfig")
public String getConfig() {
return "name="+config.getName() +";age="+config.getAge();
}
}
5)启动项目,访问 http://localhost:8800/getConfig
name=;age=0
可以看到现在,因为我们目前还没有对这些属性进行配置,所以返回的是默认缺省值。
6)访问[http://192.168.205.10:8848/nacos] 添加配置文件
注: DataId 命名规则为 \({prefix}-\){spring.profiles.active}.${file-extension}
* prefix 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix 来配置。
* spring.profiles.active 即为当前环境对应的 profile,可以通过配置项 spring.profiles.active 来配置。
* file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 prefix.{prefix}.prefix.{file-extension}
- 再次访问
http://localhost:8800/getConfig
注意:不需要重新启动应用
name=李四;age=18
可以看到已经动态刷新值了。