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 # 命名空间的id ephemeral: 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: userservice profiles: 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") @Component public class PatternProperties { private String dataform; }
在usercontroller中
@Autowired private 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-api cloud: nacos: server-addr: localhost:8848 # discovery是把该服务注册到nacos discovery: # 注册到指定的命名空间 namespace: 61954b13-8e66-4b83-abaf-c673a8525f39 # 注册时的分组 group: xuecheng-plus-project # config是配置文件管理 config: file-extension: yaml # 文件后缀名 namespace: 61954b13-8e66-4b83-abaf-c673a8525f39 group: xuecheng-plus-project # extension-configs是直接依赖某个配置文件,如下是直接依赖了content-service-dev.yaml中的内容 extension-configs: - data-id: content-service-dev.yaml group: xuecheng-plus-project refresh: true # shared-configs:是读取一些公共配置文件 shared-configs: - data-id: swagger-dev.yaml group: xuecheng-plus-common refresh: true - data-id: logging-dev.yaml group: xuecheng-plus-common refresh: 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