c 新手一个人做网站,网站主机测速,非你莫属做网站的卖网币起家的,建设一个网站需要Nacos 1. Nacos入门a.服务注册到Nacosb.Nacos服务分级存储模型c.NacosRule负载均衡d.服务实例的权重设置e.环境隔离 - namespacef.Nacos和Eureka的对比 2. Nacos配置管理a.统一配置管理b.配置热更新c.多环境配置共享 1. Nacos入门 
Nacos是阿里巴巴的产品#xff0c;现在是Spr… Nacos 1. Nacos入门a.服务注册到Nacosb.Nacos服务分级存储模型c.NacosRule负载均衡d.服务实例的权重设置e.环境隔离 - namespacef.Nacos和Eureka的对比 2. Nacos配置管理a.统一配置管理b.配置热更新c.多环境配置共享  1. Nacos入门 
Nacos是阿里巴巴的产品现在是SpringCloud中的一个组件。相比Eureka功能更加丰富在国内受欢迎程度较高。 在bin目录下windows命令 startup.cmd -m standalone执行后的效果如图 
a.服务注册到Nacos 
1.在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖 
父工程 
!--Nacos的管理依赖--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion2.2.5.RELEASE/versiontypepom/typescopeimport/scope
/dependency客户端 
!-- nacos客户端依赖包 --
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency2.注释掉order-service和user-service中原有的eureka依赖。 
3.添加nacos的客户端依赖 
!-- nacos客户端依赖包 --
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency4.修改user-serviceorder-service中的application.yml文件注释eureka地址添加nacos地址 
spring:cloud:nacos:server-addr: localhost:8848b.Nacos服务分级存储模型 服务跨集群调用问题 
服务调用尽可能选择本地集群的服务跨集群调用延迟较高本地集群不可访问时再去访问其它集群 
1.修改application.yml添加如下内容 
spring:cloud:nacos:server-addr: localhost:8848 # nacos服务地址discovery:cluster-name: HZ # 集群名称HZ代指杭州2.在Nacos控制台可以看到集群变化 c.NacosRule负载均衡 
1.修改order-service中的application.yml设置集群为HZ 
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ # 配置集群名称也就是机房位置2.然后在order-service中设置负载均衡的IRule为NacosRule这个规则优先会寻找与自己同集群的服务 
userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则d.服务实例的权重设置 
实际部署中会出现这样的场景 
服务器设备性能有差异部分实例所在机器性能较好另一些较差我们希望性能好的机器承担更多的用户请求 
Nacos提供了权重配置来控制访问频率权重越大则访问频率越高 
1.在Nacos控制台可以设置实例的权重值首先选中实例后面的编辑按钮 2.将权重设置为0.1测试可以发现8081被访问到的频率大大降低 实例的权重控制 
Nacos控制台可以设置实例的权重值0~1之间同集群内的多个实例权重越高被访问的频率越高权重设置为0则完全不会被访问 
e.环境隔离 - namespace 
Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西用来做最外层隔离 
1.每个namespace都有唯一id2.服务设置namespace时要写id而不是名称3.不同namespace下的服务互相不可见 
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wdA8eWsb-1692520242987)(C:\Users\captaindeng\AppData\Roaming\Typora\typora-user-images\image-20230729155447874.png)] 
1.在Nacos控制台可以创建namespace用来隔离不同环境 2.然后填写一个新的命名空间信息 3.保存后会在控制台看到这个命名空间的id 4.修改order-service的application.yml添加namespace 
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ # 配置集群名称也就是机房位置namespace: 67d42554-fcf4-45e8-8ecf-bfa4467ed435 # dev环境(命名空间填id)5.重启order-service后再来查看控制台 
6.此时访问order-service因为namespace不同会导致找不到userservice控制台会报错 f.Nacos和Eureka的对比 
Nacos注册中心细节分析 服务注册到Nacos时可以选择注册为临时或非临时实例通过下面的配置来设置 
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ # 配置集群名称也就是机房位置namespace: 67d42554-fcf4-45e8-8ecf-bfa4467ed435 # dev环境(命名空间填id)ephemeral: false # 是否是临时实例Nacos和Eureka的共同点 
1.都支持服务注册和服务拉取2.都支持服务提供者心跳方式做监控检测 
Nacos和Eureka的区别 
1.Nacos支持服务端主动检测提供者状态临时实例采用心跳模式非临时实例采用主动检测模式2.临时实例心跳不正常会被剔除非临时实例则不会被剔除3.Nacos支持服务列表变更的消息推送模式服务列表更新更及时4.Nacos集群默认采用AP模式当集群中存在非临时实例时采用CP模式Eureka采用AP模式 
2. Nacos配置管理 
a.统一配置管理 
统一配置管理 
配置更改热更新 
在Nacos中添加配置信息 在弹出表单中填写配置信息 配置获取的步骤如下 与配置地址和nacos地址等信息都要放在bootstrap.yml中 
1.引入Nacos的配置管理客户端依赖 
!--nacos配置管理依赖--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId
/dependency2.在userservice中的resource目录添加一个bootstrap.yml文件这个文件是引导文件优先级高于application.yml 
spring:application:name: userservice # 服务名称profiles:active: dev # 环境cloud:nacos:server-addr: localhost:8848 # nacos地址config:file-extension: yaml # 文件后缀名3.我们在user-service中将pattern.dateformat这个属性注入到UserController中做测试 
RestController
RequestMapping(/user)
public class UserController {// 注入nacos中的配置属性Value(${pattern.dateformat})private String dateformat;GetMapping(now)public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}
}b.配置热更新 
Nacos中的配置文件变更后微服务无需重启就可以感知 
不过需要通过下面两种配置实现 
方式一在Value注入的变量所在类上添加注解RefreshScope 
RestController
RequestMapping(/user)
RefreshScope
public class UserController {// 注入nacos中的配置属性Value(${pattern.dateformat})private String dateformat;GetMapping(now)public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}
}方式二(推荐)使用ConfigurationProperties注解 
新建一个config/PatternProperties类加入ConfigurationProperties注解和前缀名 
Data
Component
ConfigurationProperties(prefix  pattern)
public class PatternProperties {private String dateformat;
}RestController
RequestMapping(/user)
public class UserController {Autowiredprivate PatternProperties properties;GetMapping(now)public String now(){return
LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));}注意事项 
不是所有的配置都适合放到配置中心维护起来比较麻烦建议将一些关键参数需要运行时调整的参数放到nacos配置中心一般都是自定义配置 
c.多环境配置共享 
微服务启动时会从nacos读取多个配置文件 
[spring.application.name]-[spring.profiles.active].yaml例如userservice-dev.yaml[spring.application.name].yaml例如userservice.yaml 
论profile如何变化[spring.application.name].yaml这个文件一定会加载因此多环境共享配置可以写入这个文件 多种配置的优先级 
服务名-profile.yaml 服务名称.yaml  本地配置