动态配置服务:动态配置服务让您能够以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心化管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。
服务发现及管理:动态服务发现对以服务为中心的(例如微服务和云原生)应用架构方式非常关键。Nacos支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服务发现。Nacos也提供实时健康检查,以防止将请求发往不健康的主机或服务实例。借助Nacos,您可以更容易地为您的服务实现断路器。
动态DNS服务:通过支持权重路由,动态DNS服务能让您轻松实现中间层负载均衡、更灵活的路由策略、流量控制以及简单数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以DNS协议为基础的服务发现,以消除耦合到厂商私有服务发现API上的风险。
服务及其元数据管理:Nacos能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的SLA以及最首要的metrics 统计数据。
Nacos配置负载均衡
yml中配置:
#userservice: # 给需要调用的微服务配置负载均衡规则,orderservice服务去调用userservice服务
# ribbon:
# NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
启动器类中配置
@Bean
public IRule iRule(){
//默认为轮询规则,这里自定义为轮询规则
return new RoundRobinRule();
}
关于Nacos控制台
可以设置服务的权重值在0-1之间
权重控制
同个集群内的实例,权重越高被访问的频率越高
权重设置为0则完全不会访问
######平滑升级服务######
可以先将单个服务权重调低至0,然后停止服务进行服务更新,重启服务后给到低权重放入用户进行测试是否有问题.
环境隔离
是由namespace来做的
每一个namespace都有一个自己唯一的id
不同的namespace下的实例服务不可见
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
cluster-name: HZ
ephemeral: false
namespace: 385f44ed-fcea-4f8a-945b-516685f44e23 # 命名空间ID
1. Nacos与eureka的共同点
①都支持服务注册和服务拉取
②都支持服务提供者心跳方式做健康检测
2. Nacos与Eureka的区别
①Nacos支持服务端主动检测提供者状态:临时实例采 用心跳模式,非临时实例采用主动检测模式② 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
③Nacos支持服务列表变更的消息推送模式,服务列表 更新更及时
④Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
Nacos配置管理
Data ID为配置文件的名字一般服务名称+开发环境.ymal
Nacos微服务拉取
先要让项目启动时候优先读取nacos的地址所以要创建一个优先级比application.yml更高的配置文件bootstrap.yml
第一步先导入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
第二步创建bootstrap.yml配置文件
spring:
application:
name: userservice #文件名
profiles:
active: dev #环境
cloud:
nacos:
server-addr: localhost:8848
config:
file-extension: yaml #后缀
discovery:
cluster-name: HZ
# 配置组成:userservice-dev.yaml
检测是否能成功获取配置文件进行测试
在web的controller中
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("now")
public String now(){
//格式化时间
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
然后访问 http://localhost:8081/user/now获得返回结果
配置热更新
第一种方式
在@value注解所在的类上加上@RefreshScope
第二种方式
新建一个config包类patternproperties类
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
public String dateformat;
}
然后在controller层调用config类
先注入
@Autowired
private PatternProperties patternProperties;
再调用格式化
@GetMapping("now2")
public String now2(){
//格式化时间
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.dateformat));
}
注意
不是所有的配置都适合放到配置中心,维护起来比较麻烦
建议将一些关键参数,需要运行时调整的参数放到nacos配
置中心,一般都是自定义配置
Nacos的多环境配置共享
先配置Nacos的配置
然后idea中注入
在web层调用
更改一个userservice的配置dev改成test让原本的获取不到dataformat
然后进行测试
服务配置的优先级