spring
cloud:
nacos:
server-addr:localhost:8848 //nacos服务地址,默认8848
discovery:
cluster-name:HZ //配置集群
nacos集群
nacos把一个服务的多个实例部署到多个机房,根据地域划分为不同的集群。在服务调用的时候,会尽可能的避免跨集群调用,也就是只有本地集群不可访问时,才会去其他集群。
nacos控制台长这样,用老师的话来说就是很清爽
从图中可以看到,HZ(杭州)集群下有俩个服务实例,SH(上海)集群下有一个服务实例。注意图中的权重为1是什么意思呢
nacos的负载均衡策略
第一步,先改变默认的轮询负载均衡策略,配置为nacos专用
userservice: #微服务名称
ribbon:
NFLoadBalancerRuleClassName:com.alibaba.cloud.nacos.ribbon.NacosRule
总结的话直接搬图,我是大自然的搬运工,就是不想那么累。注意找到服务列表以后,nacos是采用随机的方式挑选服务实例。
nacos权重,下图就很明了了
问题来了,要是权重配为0(权重配置在0-1),会发生什么,答案是这个服务实例就压根不会再被访问到了.这个特性,有利于服务版本升级,很平滑地,用户无感知的就升级了!
nacos服务管理
如果你看不太懂这个图,我教你呀
nacos默认情况下所有实例都是临时实例,临时实例nacos发现他挂了,就直接给他剔除。
并且,临时实例和eureka一样是心跳检测来判断健康状态的。
非临时实例就不一样了,nacos亲儿子无疑了,nacos会主动询问你还活着吗,而且就算挂了,
nacos也不剔除,会等服务重启
而且由于定时拉取时效性比较差,nacos在定时拉取的基础上又加了一个push,一旦nacos发现
有服务挂了就会主动推送
nacos 配置管理
配置热更新,热更新就是不用重启,自动生效。这个配置文件呢要唯一,一般是这样的userservice-dev.yaml(服务名+生产环境,保障唯一性)。
项目启动后,先读取配置文件bootstrap.yml,它的优先级高于application.yml。读它的目的就是知道nacos地址,找到nacos控制台上唯一的配置文件userservice-dev.yaml,一一对应,好神奇
你以为这就完了?还需要做点别的热更新才能生效
抓俩注解,@RefreshScoope +@Value,看起来就麻烦
还有另外一种更麻烦的@ConfigurationProperties。不多讲,因为我也没太懂哈哈,给个图参考
nacos集群
这可以不看因为我当时直接跳了去学Feign,我可不是劝退你的。为了完整知识,放个图意思意思
什么,你问我Feign是什么,就是一种取代RestTemplate,可以用一种更优雅的方式发送请求