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