SpringCloud(二.2)Nacos服务的搭建与使用(更常用)
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
优势:Eureka只能当注册中心,Nacos还能当配置中心。
详细请见:Nacos安装
父工程配置
pom
<!--nacos的管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>

客户端(微服务)配置:
pom
<!-- nacos客户端依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
yml

效果展示:


客户端(微服务)Nacos集群配置:

客户端(微服务)之间的远程调用优先选择同集群配置:
备注:A服务调B服务 在A服务的yml中配置,这里的userservice是B服务yml配置文件中的application name值
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

Nacos 根据权重负载均衡 配置:

如果权重调成0后,则不会被调用。(版本升级时可以这样配置)
Nacos 环境隔离 配置:

创建后会自动生成命令空间的ID


yml配置

效果展示:

备注:不在同一命令空间的微服务实例无法互相远程调用。
Nacos 非临时实例 配置:
Nacos默认为临时实例
临时实例(更推荐):采用心跳监测是否正常,如果不正常则服务会被踢除。
非临时实例:nacos主动询问,如果不正常服务不会被踢除。缺点:会给服务器造成一定压力。

Nacos 配置管理 --- 配置



微服务获取Nacos中的配置信息
<!--nacos的配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
spring: application: name: userservice profiles: active: dev # 环境 cloud: nacos: server-addr: nacos:8848 # nacos地址 config: file-extension: yaml # 文件后缀名

配置好以后我们可以测试一下看是否能读取到Nacos中的配置文件
我们在Nacos中配置内容中写了一个日期格式dateformat,我们可以写个接口获取一下,看能否得到。
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}

Nacos 配置管理 --- 配置自动刷新
微服务获取Nacos中的配置信息,当Nacos中的配置信息发生变更时会发现页面刷新后并不能获取到,只能是停掉重新项目。这时就需要配置自动刷新。
拿上面的案例来讲,Nacos中配置的dateformat日期格式发生变动后,页面刷新并不能及时变更。

方式一:在@Value注入变量所在类上添加注解@RefreshScope

方式二:使用@ConfigurationProperties注解
1、新建一个类PatternProperties专门完成属性的加载
prefix=“前缀”,Nacos中配置的前缀为pattern。


2、在相关类中注入PatternProperties然后获取相关配置

Nacos 配置管理 --- 多环境配置共享

1、在Nacos中新增共享属性配置userservice.yaml


2、在配置类中新增配置属性名

测试查看是否能读取到共享配置内容
@GetMapping("prop")
@GetMapping("prop")
public PatternProperties properties(){
return properties;
}

效果如图:

优先级:

Nacos集群搭建
链接:https://pan.baidu.com/s/1SSsmtCtl80HlPIDGa0hzYg
提取码:vjx9

浙公网安备 33010602011771号