6. Eureka 和 Nacos 对比
共同点 :
都支持服务注册和服务拉取
都支持服务提供者心跳方式做健康检测
不同点 :
1.nacos支持服务端主动检测提供者状态,临时实例采用心跳模式,非临时实例采用主动检测模式
-
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
-
nacos支持服务列表变更的消息推送模式,服务列表更新及时
-
nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式 Eureka默认采用AP
-
nacos临时实例一旦关闭服务后就会被剔除,非临时的不会
配置为非临时实例 :
order-service 的 yml文件中 :
cloud:nacos:server-addr: localhost:8848 # nacos服务地址discovery:cluster-name: HZ # 集群名称 HZ代指杭州namespace: 9d2976a6-9560-46b7-a680-260801971b01 # 命名空间的idephemeral: false # 是否为临时实例
order-service因为设置为了非临时实例所以会一直存在并且不会被剔除
7. Nacos配置管理
7.1 统一配置管理
新建配置 :
Data ID 一般是 服务名称-profile.后缀名
7.2 微服务配置读取
bootstrap.yml优先级高于application.yml
引入Nacos的配置管理依赖
<!--nacos配置管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
resources目录下新建bootstrap.yml
spring:application:name: userserviceprofiles:active: dev # 环境cloud:nacos:server-addr: localhost:8848 # nacos地址config:file-extension: yaml # 拼接的文件后缀名
在nacos中找配置文件最后是拼接application下的name 和 profiles下的active的环境 以及 file-extension 的后缀名 : userservice-dev.yaml
测试 :
@Value("${pattern.dataform}")private String dataformat;@GetMapping("/now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dataformat));}
7.3 配置热更新
配置自动更新 :
方法一 : 在用上了配置的类上加上@RefreshScope注解
@Slf4j@RestController@RequestMapping("/user")@RefreshScope
方法二 : 新建配置类
@Data@ConfigurationProperties(prefix = "pattern")@Componentpublic class PatternProperties {private String dataform;}
在usercontroller中
@Autowiredprivate PatternProperties properties;@GetMapping("/now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDataform()));}
7.4 微服务配置共享
配置的优先级 :
服务名-profile.yaml > 服务名.yaml > 本地配置
如user-service服务中 : userservice-dev.yaml > userservice.yaml > application.yml
7.5学成在线的配置文件案例
#微服务配置spring:application:name: content-apicloud:nacos:server-addr: localhost:8848# discovery是把该服务注册到nacosdiscovery:# 注册到指定的命名空间namespace: 61954b13-8e66-4b83-abaf-c673a8525f39# 注册时的分组group: xuecheng-plus-project# config是配置文件管理config:file-extension: yaml # 文件后缀名namespace: 61954b13-8e66-4b83-abaf-c673a8525f39group: xuecheng-plus-project# extension-configs是直接依赖某个配置文件,如下是直接依赖了content-service-dev.yaml中的内容extension-configs:- data-id: content-service-dev.yamlgroup: xuecheng-plus-projectrefresh: true# shared-configs:是读取一些公共配置文件shared-configs:- data-id: swagger-dev.yamlgroup: xuecheng-plus-commonrefresh: true- data-id: logging-dev.yamlgroup: xuecheng-plus-commonrefresh: true# profile指定环境profiles:active: dev
最终该模块会读取的文件有 :
-
自身的application的name 组合profiles的active 再组合 file-extension形成的content-api-dev.yaml文件
-
依赖的content-service-dev.yaml文件
-
公共配置文件 swagger-dev.yaml , logging-dev.yaml