springcloud-nacos

144 阅读3分钟

windows启动nacos

到nacos的bin目录下 启动tartup.cmd,nacos网址默认为http://localhost:8848/nacos

注册中心

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

主启动类加@EnableDiscoveryClient注解

nacos支持AP,CP模式的切换

nacos默认支持负载均衡(使用RestTemplate时)

@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced  //负载均衡:默认轮询
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}



配置集群(cluster-name)

例如微服务实例A部署在杭州,实例B部署在上海

  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名称 HZ杭州

image.png

Ribbon的默认实现 ZoneAvoidanceRule 并不能实现根据同集群优先来实现负载均衡,我们把规则改成 NacosRule 即可。我们是用 orderservice 调用 userservice,所以在 orderservice 配置规则。

@Bean
public IRule iRule(){
    //默认为轮询规则,这里自定义为随机规则
    return new NacosRule();
}
或者配置Yml
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则 

这样,HZ的orderservice默认调用HZ的userservice,当HZ的userservice下线后,即可调用其他的userservice,但是后台会报警告

权重配置

服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。但默认情况下 NacosRule 是同集群内随机挑选,不会考虑机器的性能问题。

因此,Nacos 提供了权重配置来控制访问频率,0~1 之间,权重越大则访问频率越高,权重修改为 0,则该实例永远不会被访问。

在 Nacos 控制台,找到 user-service 的实例列表,点击编辑,即可修改权重。

image.png

image.png ** 另外,在服务升级的时候,有一种较好的方案:我们也可以通过调整权重来进行平滑升级,例如:先把 userservice 权重调节为 0,让用户先流向 userservice2、userservice3,升级 userservice后,再把权重从 0 调到 0.1,让一部分用户先体验,用户体验稳定后就可以往上调权重啦。**

临时实例

Nacos 的服务实例分为两种类型:

  • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型
  • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

配置一个服务实例为永久实例:

spring: cloud: nacos: discovery: ephemeral: false # 设置为非临时实例

配置中心

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848  #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        #namespace: 7a901d46-e75e-4e6a-b186-5980cca4249b

需要动态刷新的类上加 @RefreshScope 注解

匹配规则

spring.application.name{spring.application.name}-{spring.profiles.active}.${spring.cloud.nacos.config.file-extension} 例如:nacos-config-client-dev.yaml

4e1596494f713532910da1963b90ec5.png

环境切换(三种方案)(例如:命名空间:不同企业,分组:不同项目名,dataid:不同环境)

DataID方案

例子:test环境跟dev环境切换只需更改spring.profiles.active即可 image.png

group方案

image.png

image.png

namespace 方案

image.png

image.png