Nacos
-
配置中心
搭建
1.maven依赖
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.bootstrap.yml
spring:
application:
name: provider
# profiles:
# active: dev
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#namespace: 9e10a8ac-ea2c-4ee3-a221-c5b7653cd474
group: NACOS_MICRO_SERVICE_GROUP
config:
server-addr: 127.0.0.1:8848
# file-extension: yaml
# dataID ${prefix}-${spring.profiles.active}.${file-extension}
# 命名空间 默认 public
#namespace: 9e10a8ac-ea2c-4ee3-a221-c5b7653cd474
# 配置组 默认 DEFAULT_GROUP
group: NACOS_MICRO_SERVICE_GROUP
#nacos:
# test : 1101
# name : qyc1
# port : 1231
spring.cloud.nacos.config.enable = true
( 读取远程配置)
/ false( 不读取远程配置)
读取nacos服务器端规则:
nacos服务端按照 {prefix}-{spring.profiles.active}.{file.extension} 创建文件: 项目自动时,自动按照这个规则到服务器端找这个文件
{prefix}:
spring.application.name
{spring.profiles.active}:
如果没有spring.profiles.active,则 “-”连同后面的都不写,
{file.extention}:
指定的文件类型,支持yaml、properties两种
3.代码配置
@RefreshScope
//@ConfigurationProperties(prefix = "nacos")
@Component
@Data
public class RefreshConfig {
@Value("${nacos.test}")
private String test;
@Value("${nacos.name}")
private String name;
@Value("${nacos.port}")
private int port;
}
原理
1.
nacos config 数据结构
主要通过dataId 和 group 来唯一确定一条配置
2.
springcloud 应用获取数据
dataId
在 Nacos Config Starter 中,dataId 的拼接格式如下
${prefix} - ${spring.profiles.active} . ${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档
注意,当 activeprofile 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}.prefix.{file-extension}
file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。 目前只支持 properties 类型。
group
group 默认为
DEFAULT_GROUP,可以通过
spring.cloud.nacos.config.group 配置。
3.
自动注入
Nacos Config Starter 实现了 org.springframework.cloud.bootstrap.config.PropertySourceLocator接口,并将优先级设置成了最高。
在 Spring Cloud 应用启动阶段,会主动从 Nacos Server 端获取对应的数据,并将获取到的数据转换成 PropertySource 且注入到 Environment 的 PropertySources 属性中,所以使用 @Value 注解也能直接获取 Nacos Server 端配置的内容。
4.
动态刷新
Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法 。
如果需要对 Bean 进行动态刷新,给类添加 @RefreshScope 或 @ConfigurationProperties注解。
-
注册中心
搭建
1.maven依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.bootstrap.yml
spring:
application:
name: provider
# profiles:
# active: dev
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#namespace: 9e10a8ac-ea2c-4ee3-a221-c5b7653cd474
group: NACOS_MICRO_SERVICE_GROUP
config:
server-addr: 127.0.0.1:8848
# file-extension: yaml
# dataID ${prefix}-${spring.profiles.active}.${file-extension}
# 命名空间 默认 public
#namespace: 9e10a8ac-ea2c-4ee3-a221-c5b7653cd474
# 配置组 默认 DEFAULT_GROUP
group: NACOS_MICRO_SERVICE_GROUP
#nacos:
# test : 1101
# name : qyc1
# port : 1231
3.代码配置
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosProviderApplication {
@FeignClient(value = "quickstart-provider")
public interface ProviderClient {
@GetMapping("/service")
String service();
}
@RestController
public class ConsumerController {
@Autowired
private ProviderClient providerClient;
@GetMapping("/service")
public String service() {
//远程调用
String service = providerClient.service();
return "消费者:hello; " + service;
}
}
-
源码