SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解

SpringCloud Alibaba Nacos 服务注册和配置中心


文章目录

  • SpringCloud Alibaba Nacos 服务注册和配置中心
    • Nacos简介
    • 安装并运行Nacos
    • Nacos作为服务注册中心演示
      • 官方文档
      • 基于Nacos的服务提供者
      • 基于Nacos的服务消费者
      • 服务注册中心对比
    • Nacos作为服务配置中心演示
      • Nacos作为配置中心-基础配置
      • Nacos作为配置中心-分类配置
    • Nacos集群和持久化配置
      • 单机模式支持mysql
      • Nacos持久化配置解释
      • Linux版Nacos+MySql生产环境配置


Nacos简介


一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台

Nacos就是 注册中心+配置中心 的组合

SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第1张图片

安装并运行Nacos


  • 官网下载Nacos :

    home (nacos.io)

  • 解压安装包,直接运行bin目录下的 startup.cmd

  • 命令运行成功后直接访问 http://localhost:8848/nacos

    默认的账号密码都是nacos

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第2张图片

Nacos作为服务注册中心演示


官方文档


Spring Cloud Alibaba Reference Documentation (spring-cloud-alibaba-group.github.io)

基于Nacos的服务提供者


  • 新建Module cloudAlibaba-provider-payment9001

  • pom

    父pom:

    
                    com.alibaba.cloud
                    spring-cloud-alibaba-dependencies
                    2021.1
                    pom
                    import
                
    

    本地pom:

    		
    		
    			com.alibaba.cloud
    			spring-cloud-starter-alibaba-nacos-discovery
    		
    
  • yml:

    server:
      port: 9001
    
    spring:
      application:
        name: nacos-payment-provider
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848   #配置Nacos地址
    
    management:
      endpoints:
        web:
          exposure:
            include: *   #暴露出需要监控的端点
    
  • 主启动类:

    在主启动类上添加注解:@EnableDiscoveryClient

  • 业务类:

    @RestController
    public class PaymentController {
    
        @Value("${server.port}")
        private String serverPort;
    
        @RequestMapping("/pay/nacos/{id}")
        public String getServerPort(@PathVariable("id") Integer id){
            return "nacos registry,serverPort: "+serverPort+"\t"+"id: "+id;
        }
    }
    
  • 测试

    启动nacos服务注册中心、服务提供者9001

    可以在nacos后台看到微服务信息:

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第3张图片

    访问 http://localhost:9001/pay/nacos/1

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第4张图片

基于Nacos的服务消费者


  • 新建Module: cloudAlibaba-consumer-nacos-order83

  • 模仿 provider9001 创建 provider9002

  • pom:

    
            
                org.springframework.cloud
                spring-cloud-starter-netflix-ribbon
                2.2.10.RELEASE
            
            
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-discovery
            
    
  • yml:

    server:
      port: 83
    
    spring:
      application:
        name: nacos-order-consumer
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848   #配置Nacos地址
    
    #消费者将要访问的微服务名称
    service-url:
      nacos-user-service: http://nacos-payment-provider
    
  • 主启动类:

    添加注解:@EnableDiscoveryClient

  • 配置类:

    @Configuration
    public class ApplicationContextConfig {
    
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }
    
  • 业务类:

    @RestController
    public class OrderController {
    
        @Autowired
        private RestTemplate restTemplate;
    
        /**
         * 读取配置文件中的信息,方便快捷
         */
        @Value("${service-url.nacos-user-service}")
        private String serviceUrl;
    
        @RequestMapping("/consumer/nacos/{id}")
        public String getServerPort(@PathVariable("id") Integer id){
            return restTemplate.getForObject(serviceUrl+"/pay/nacos/"+id,String.class);
        }
    }
    
  • 测试:

    启动nacos控制台、provoder9001,9002、consumer83

    访问:http://localhost:83/consumer/nacos/1

服务注册中心对比


各种注册中心对比:

SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第5张图片

  • Nacos全景图所示:

  • Nacos和 CAP:

    Nacos自动支持 AP 和 CP 的切换

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第6张图片

  • 切换:

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第7张图片

Nacos作为服务配置中心演示


Nacos作为配置中心-基础配置


  • 新建Module cloudAlibaba-config-nacos-client3377

  • pom:

    
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-config
            
            
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-discovery
            
    
  • yml:

    yml配置文件需要配置两个,原因:

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第8张图片

    全局配置文件 bootstrap.yml:

    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格式的配置
    

    单模块配置文件 application.yml:

    spring:
      profiles:
        active: dev  #表示开发环境
    
  • 主启动类:

    添加注解:@EnableDiscoveryClient

  • 业务类:

    @RestController
    @RefreshScope   //支持Nacos的动态刷新功能
    public class ConfigClientController {
    
        @Value("${config.info}")
        private String configInfo;
    
        @RequestMapping("/config/info")
        public String getConfigInfo(){
            return configInfo;
        }
    }
    
  • 在Nacos中添加配置信息:

    Nacos中的配置规则:

    • 理论:

      Nacos中的dataid的组成格式及与SpringBoot配置文件中的匹配规则

      官网地址:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

      SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第9张图片

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WeoKPZfH-1654110127965)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220601164240698.png)]

    • 实操:

      配置列表选择 新建配置:

      SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第10张图片

  • 测试:

    运行cloud-config-nacos-client3377的主启动类

    调用接口查看配置信息:http://localhost:3377/config/info

    自带动态刷新

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第11张图片

Nacos作为配置中心-分类配置


  • 分布式开发当中的问题:

    多环境多项目管理

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第12张图片

  • Nacos的图形化管理界面:

    配置管理:

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第13张图片

    命名空间:

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第14张图片

  • NameSpace + Group + Data ID三者关系,设计原因:

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第15张图片

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第16张图片

  • 三种方式加载配置:

    • dataId方案

      指定spring.profile.active和配置文件的dataId来使不同环境下读取不同配置

      新建dev配置dataId,新建test配置dataId

      SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第17张图片

      修改application.yml配置:

      spring:
        profiles:
          active: info  #表示开发环境 配置是什么就加载什么
      
      

      测试:

      SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第18张图片

    • group方案

      通过group实现环境区分

      在配置时修改group:

      SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第19张图片

      并修改bootstrap.yml:

      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  #配置group
      

      修改application.yml:

      spring:
        profiles:
          active: info  #表示开发环境 配置是什么就加载什么
      
    • namespace方案

      新建dev/test的namespace

      SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第20张图片

      配置列表在 名称空间dev下选择新建:

      SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第21张图片

      SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第22张图片

      SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第23张图片

      复制命名空间id,配置bootstrap.yml:

      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848  #Nacos作为服务注册中心
          config:
            server-addr: localhost:8848  #Nacos作为服务配置中心
            file-extension: yaml  #指定从配置中心中读取yaml格式的配置
            group: DEV_GROUP  #配置group
            namespace: 5b458e8e-fc75-46a9-b9c9-41644e8119ee  #命名空间id
      

Nacos集群和持久化配置


Nacos集群部署 官方文档:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

架构图:

SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第24张图片

SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第25张图片

默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySql的存储

单机模式支持mysql

在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

  • 1.安装数据库,版本要求:5.6.5+
  • 2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
  • 3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql

Nacos持久化配置解释


Nacos默认自带的是嵌入式数据库derby

derby到mysql切换配置步骤:

  • 打开nacos安装文件目录

  • \nacos\conf 目录下找到sql脚本 nacos-mysql.sql , 执行脚本

  • \nacos\conf 目录下找到application.properties

    修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

    spring.datasource.platform=mysql
    
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user=nacos_devtest  #本机数据库用户名
    db.password=youdontknow  #本机数据库密码
    

    再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql

Linux版Nacos+MySql生产环境配置


预计需要,1个Nginx+3个nacos注册中心+1个mysql

Nacos下载Linux版,解压后安装

集群配置步骤:

  1. Linux服务器上mysql数据库配置

    找到nacos-mysql.sql文件,粘贴到linux上的mysql数据库中

  2. 配置application.properties,与在windows上的配置相同

  3. Linux服务器上nacos的集群配置cluster.conf

    梳理出三台nacos机器的不同服务端口号

    复制出cluster.conf并修改,注意:这个ip不能写127.0.0.1,必须是Linux命令hostname -i能够识别的ip

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-snCoRcMr-1654110127974)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220602021238273.png)]

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第26张图片

  4. 编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端口

    在/nacos/bin/目录下有startup.sh

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第27张图片

  5. 配置Nginx,由它作负载均衡

    修改nginx的配置文件nginx.conf,并重新启动

    SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第28张图片

  6. 截至此处,配置了 1个nginx+3个nacos服务注册中心+1个mysql

    测试通过nginx访问nacos:http://192.168.111.144:1111/nacos/#/login

    新建一个配置测试,查看linux下的mysql是否成功插入了记录

测试:

微服务 cloudAlibaba-provider-payment9002启动注册进nacos集群

修改配置文件:

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.111.144:1111  #换成nginx的1111端口,做集群
      #server-addr: localhost:8848  #配置nacos地址

启动9002,查看nacos后台界面,成功注册进入nacos:

SpringCloud Alibaba 之 Nacos 服务注册和配置中心 详解_第29张图片

你可能感兴趣的:(Spring,Cloud,spring,cloud,微服务,java)