nacos使用详解

nacos详解

  1. 概念:动态服务发现,配置管理和服务管理平台,即注册中心+配置中心的结合

    官网文档:https://nacos.io/zh-cn/index.html
    github文档:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery

  2. 安装运行

  3. 实际应用

    • 导入pom文件

      主模块pom

      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-alibaba-dependencies</artifactId>
          <version>2.1.0.RELEASE</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
      

      应用模块pom

      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      
    • 配置服务提供者/服务调用者yml文件

      spring:
        application:
          name: nacos-order-consumer
        cloud:
          nacos:
            discovery:
              server-addr: localhost:8848 # 指定nacos地址
              cluster-name: HZ # 集群名称,配置实例集群属性
              ephemeral: false # 设置为非临时实例 非临时实例nacos主动问询服务是否可用,服务不可用也不会被剔除
      
    • 启动类

      //添加注解
      @EnableDiscoveryClient
      
    • 服务消费者端添加调用负载均衡(注意2021版本后nacos放弃默认集成Ribbon)

      @Configuration
      public class ApplicationContextConfig
      {
          @Bean
          @LoadBalanced
          public RestTemplate getRestTemplate()
          {
              return new RestTemplate();
          }
      }
      
  4. nacos和cap

    • C是所有节点在同一时间看到的数据是一致的;而A的定义是所有的请求都会收到响应。
  5. nacos和eureka比较

    img.png
  6. nacos服务分级存储模型

    服务-->集群-->实例

    image-20230201220611715.png
  • 服务跨集群调用问题:服务调用尽可能选择本地集群服务,跨集群调用延迟较高,本地集群不可用情况下才去考虑其他集群

当服务提供者实例和服务调用者实例配置到同一个集群中,可以通过调用负载均衡规则优先选择本地集群(本地集群实例随机访问),如果调用的本地集群全部不可访问,会访问外部集群,并产生一个访问外部集群的警告

更改负载均衡规则(通过配置文件方式)

springcloud-nacos-provider: # nacos中的服务id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #设置负载均衡策略 优先选择本地集群
  • 服务实例权重设置:

    nacos控制台可以设置实例的权重值,0~1之间,同一集群的多个实例权重值越高被访问频率越高,权重设置为0则完全不会被访问

    设置为0的时候不会被调用访问,可以在系统升级的时候,把一个实例设置为0,这样用户就不会访问,调用者逐渐停止访问后可以重启升级,待升级完成后,先设置较小权重,放进少部分用户查看升级效果,后逐渐提高权重到正常,实现平滑用户无感知升级。

    image-20230202092131877.png
  1. nacos作为服务配置中心应用

    • 目的:统一服务配置文件,做热更新

    • pom文件引入

      <!--nacos-config-->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      </dependency>
      
    • Nacos在项目初始化的时候,要保证先从配置中心进行配置拉取,springboot配置文件加载存在优先级,bootstrap优先级高于application,所以nacos信息配置在bootstrap.yml配置文件中

    • yml配置

      # nacos配置
      server:
        port: 3377
      
      spring:
        application:
          name: nacos-config-client
        cloud:
          nacos:
            discovery:
              server-addr: localhost:8848 #Nacos服务注册中心地址
            config:
              server-addr: localhost:8848 #Nacos作为配置中心地址
              file-extension: yaml #指定yaml格式的配置
              group: DEV_GROUP
              namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4 # 不同命名空间服务访问不到,用来做环境隔离
      
      
      # ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
      # nacos-config-client-dev.yaml
      
    • nacos匹配公式{spring.application.name}-{spring.profile.active}.${spring.cloud.nacos.config.file-extension}

    • 配置中心分类配置

      • 需要解决的问题:在实际项目中通常一个设备会有dev开发环境,test测试环境,prod生产环境如何保证指定环境启动时服务能正确读取到nacos上相应的环境配置文件?

        而在上面各种环境中,一个微服务项目又会有许多微服务子项目,如何保证不同的微服务子系统在不同的环境下进行配置管理

      • 通过NameSpace+Group+DataId来区分

        最外层的NameSpace可以用来区分部署环境,Grop和DataID逻辑上区分两个目标对象

        默认情况下Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULT

        NameSpace:用来隔离开发、测试、生产等环境,默认是public

        Group:默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去

        Service:就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。

      image-20230201140425878.png
      • 三种方案加载配置

        • DataId方案:利用spring.profile.active和配置文件的DataId来使不同环境下读取不同配置

          spring:
            profiles:
              active: dev # 表示开发环境
              #active: test # 表示测试环境
              #active: info
          
        • Group方案:通过Group实现环境区分

          image-20230201141808504.png
        • NameSpace方案:通过新建不同的NameSpace根据命名空间id来区分

    • 多环境配置共享

      • 多环境配置读取
      image-20230202112522470.png
      • 多环境配置如果共同配置了同一属性,则远端单一环境优先级大于多环境配置共享大于本地环境配置文件
        优先级排序:[服务名称]-[环境].yaml>服务名称.yaml>本地配置


        image-20230202134036587.png
      • 自动刷新

      在业务类中使用@RefreshScope //支持Nacos的动态刷新功能,并根据@Value直接获取

      修改nacos中的yaml配置文件再次调用使用到配置文件的接口的时候发现已经刷新

      第二种方式 @ConfigurationProperties

      @Data
      @Component
      @ConfigurationProperties(prefix = "pattern")
      //通过prefix + 常量方式将配置文件中的值注入到常量中,当nacos配置更改的时候自动刷新
      public class PatternProperties {
          private String dataformat;
      }
      
      //通过@Component方式加入容器,用的时候通过@Autowired注入
      
    • nacos会记录历史配置文件30天,此外还有一键回滚功能,回滚操作时触发配置刷新

  2. Nacos集群和持久化配置

  3. Linux中Nacos+Mysql生产环境部署

    1.环境:一个nginx+三个nacos注册中心+mysql

    1. 下载:https://github.com/alibaba/nacos/releases/

    2. sql脚本在conf文件夹下nacos-mysql.sql在数据库中执行

    3. 修改conf下的application.properties文件,编写数据库连接信息

    4. 通过hostname -i 确定nacos所在环境ip

    5. 根据conf下的cluster.conf.example 拷贝出 cluster.conf ,编辑cluster.conf 注掉或者删掉原有的ip,编写nacos服务所在的ip和端口

    image-20230201150936281.png
    1. 编辑bin目录下startup.sh使其接受不同启动端口(./startup.sh -p 3333 启动3333nacos服务端口)修改startup.sh文件(所有文件修改前一定要做基础备份)
    image-20230201152319592.png
    1. 启动三个:./startup.sh -p 3333 ./startup.sh -p 4444 ./startup.sh -p 5555

    2. 修改nginx配置文件

    image-20230201163341225.png
    1. 指定nginx配置文件启动
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容