分布式配置中心
Nacos Spring Cloud 快速开始
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.11.RELEASE</version><relativePath/> </parent><groupId>com.x</groupId><artifactId>spring-cloud-alibaba-root</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><properties><java.version>1.8</java.version><spring.cloud.version>Hoxton.SR8</spring.cloud.version><spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version></properties>
<modules><module>spring-cloud-nacos</module>
</modules><dependencyManagement><dependencies><!--Spring Cloud的版本管理--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--Spring Cloud Alibaba的版本管理--><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></dependencies></dependencyManagement><build></build></project>
1. 引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
2.新建bootstrap.properties
在使用Nacos作为配置中心时,推荐在
bootstrap.properties
或bootstrap.yml
中配置Nacos相关信息,而不是在application.properties
或application.yml
中,原因主要涉及Spring Boot的启动过程和配置加载顺序:1.早于主应用加载:
bootstrap.properties
或bootstrap.yml
会在application.properties
或application.yml
之前被加载。这意味着Nacos客户端的配置信息可以在应用的主配置被处理之前就被初始化,包括获取远程配置的能力。这样,应用在启动时就能使用从Nacos配置中心获取的配置,而非本地静态配置,实现了配置的动态性和灵活性。2.配置优先级:
bootstrap
配置的优先级高于application
配置,这保证了从Nacos加载的配置可以覆盖本地默认配置,满足了外部化配置的需求,即运行时的配置能够覆盖编译时的配置。
3. 配置如下:
spring.application.name = wms-appspring.cloud.nacos.config.server-addr = 192.168.11.48:8848#name 就是Nacos里面的dataId,如果不配置就默认使用 spring.application.name
spring.cloud.nacos.config.name = ${spring.application.name}#如果不配置默认使用的命名空间是 public,如果你配置了就去该命名空间下查找对应表的dataId
spring.cloud.nacos.config.namespace = dev#如果不配做就使用DEFAULT_GROUP去找对应配置,如果指定就按照指定的去找
#spring.cloud.nacos.config.group = V2# 决定这个应用读取的是哪个配置文件: namespace + group + dataId 三部分缺一不可
4.通过 Spring Cloud 原生注解@RefreshScope 实现配置自动更新
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {@Value("${boy.name:潘周聃}")private String name;@RequestMapping("/get")public String get() {return this.name;}
}
Nacos服务注册中心
1.引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
2.application.properties中配置
# 应用名称
spring.application.name=nacos-aserver.port=8080# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
更多配置:
Nacos discovery · alibaba/spring-cloud-alibaba Wiki · GitHub
3 启动应用
启动springboot应用,nacos管理端界面查看是否成功注册
4 调用其它服务
4.1新建应用nacos-b
@RestController
public class HelloController {@GetMapping("hello")public String hello(){return "hello world";}
}
4.2使用RestTemplate进行服务调用,可以使用微服务名称(spring.application.name)
注意:需要添加@LoadBalanced注解
@Configuration
public class RestConfig {@Bean@LoadBalanced //注意:如果使用服务注册中心,需要添加@LoadBalanced注解//加上该注解之后,RestTemplate会把请求的一级目录最为服务名,去服务注册中心抓取对应的ip,然后再去调用对应的接口数据public RestTemplate restTemplate() {return new RestTemplate();}
}
@SpringBootApplication
public class NacosApplication {public static void main(String[] args) {ApplicationContext ctx = SpringApplication.run(NacosApplication.class, args);RestTemplate restTemplate = ctx.getBean(RestTemplate.class);String forObject = restTemplate.getForObject("http://nacos-b/hello", String.class);System.out.println(forObject);}}
5.工作原理
6.触发保护值
要在 Nacos 中配置开启服务实例的保护阈值,你需要在服务消费端(客户端)的 Spring Cloud 配置中添加相应的属性。以下是配置示例,通常是在 application.yml
文件中进行设置:
spring:cloud:nacos:discovery:protectThreshold: 0.2
在这个例子中,protectThreshold
设置为 0.2,意味着当服务实例中健康实例的比例低于 20% 时,保护机制将会被触发,Nacos 将返回所有实例(包括健康和不健康)给服务消费者。