集群分区
在一个分布式应用中,一个相同的服务可能会在不同的机器、位置上启动,当我们一个服务去调用另一个服务,如果被调用的服务存在多个分布式,我们应该优先选择调用方同一区域的服务进行调用,使得响应速度更快。
因此我们需要对不同机房部署的服务进行分区,而Nacos默认的分区是DEFAULT分区。
注:Eureka也存在集群分区如:
这里写入的就是集群分区
在Nacos中我们通过配置文件来实现:
spring:
application:
name: borrowservice
cloud:
nacos:
discovery:
server-addr: localhost:8848
# 修改为重庆地区的集群
cluster-name: Chongqing
当然我们也可以在启动配置中直接写入环境变量spring.cloud.nacos.discovery.cluster-name
之后就可以看到服务被划分到不同的集群了:
之后,我们需要开启Nacos的负载均衡才能实现区域优先调用机制,配置文件:
spring:
application:
name: borrowservice
cloud:
nacos:
discovery:
server-addr: localhost:8848
cluster-name: Chengdu
# 将loadbalancer的nacos支持开启,集成Nacos负载均衡
loadbalancer:
nacos:
enabled: true
除了根据区域优先调用之外,同一个区域内的实例也可以单独设置权重,Nacos会优先选择权重更大的实例进行调用,我们可以直接在管理页面中进行配置,也可以在配置文件进行配置:
spring:
application:
name: borrowservice
cloud:
nacos:
discovery:
server-addr: localhost:8848
cluster-name: Chengdu
# 权重大小,越大越优先调用,默认为1
weight: 0.5
配置中心
如同Erueka支持配置中心远程加载配置,Nacos也有配置中心的功能。
我们在管理页面的配置管理中可以添加配置信息,注意Data ID的格式跟之前一样,应用名称-环境.yml
,如果只编写应用名称,那么代表此配置文件无论在什么环境下都会使用,然后每个配置文件都可以进行分组,也算是一种分类方式:
之后我们在项目中引入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
然后就可以配置bootstrap.yml
(在application.yml之前加载,可以实现配置文件远程获取)了:
同时,Nacos还支持配置文件热更新,我们只需要使用注解@RefreshScope
如:
@RestController
@RefreshScope //添加此注解就能实现自动刷新了
public class TestController {
@Value("${test.txt}")
String txt;
@RequestMapping("/test")
public String test(){
return txt;
}
}
这样该Controller的信息就会随着配置文件改变而热更新了。