zoukankan      html  css  js  c++  java
  • 注册中心Nacos详解

    1. Nacos简介

    Nacos:由Spring Cloud Alibaba 提供的。 Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

    nacos集成了netflix公司的ribbon,支持负载均衡(默认:轮询)。

    naocos对于CAP的支持:它支持AP和CP模式的切换。

    Nacos官方网址:https://nacos.io/zh-cn/



    2. Nacos作为注册中心使用

    2.1 添加依赖

    <!-- nacos注册中心依赖包 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!-- 监控检查-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    

    2.2 添加配置文件

    spring:
      application:
        name: nacos-web
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.200.128:8848
    
    server:
      port: 9100
    
    #健康检查
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    

    2.3 启动类

    @SpringBootApplication
    @EnableDiscoveryClient   //服务发现注解   用于注册中心能够发现,扫描到改服务   如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient
    public class NacosWebApplication {
    ​
        public static void main(String[] args) {
            SpringApplication.run(NacosWebApplication.class,args);
        }
    }
    

    2.4 创建一个控制器

    @RestController
    public class InfoController {
    ​
        @Value("${server.port}")
        private String port;
    ​
        @Value("${key:''}")
        private String key;
    ​
        @GetMapping(value = "/echo/{message}")
        public String echo(@PathVariable(value = "message") String message) {
            return "Hello Nacos Discovery " + message + ", i am from port " + port;
        }
    ​
        @GetMapping(value = "/config")
        public String config() {
            return "Hello Nacos Config get "+key ;
        }
    }
    

    2.5 启动服务查看效果





    3. Nacos作为配置中心使用

    3.0 补充配置中心数据模型

    Nacos数据模型由三元组确定,Namespace,Group,DataID。

    3.1 添加依赖

    <!-- nacos配置中心依赖包 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    

    3.2 添加配置文件

    # 注意:配置文件必须是bootstrap.properties或者bootstrap.yml,如果配置application.properties或者application.yml会导致加载不到配置。
    
    spring:
      application:
        name: nacos-web
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.200.140:8848
          config:
            server-addr: 192.168.200.140:8848 #指定配置中心地址
            file-extension: yaml #指定nacos配置中心的文件扩展名,默认为properties。支持:TEXT JSON XML YAML HTML Properties
    
    server:
      port: 9100
    
    #全局健康检查
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    

    3.3 创建配置

    配置文件格式:默认是properties,如果项目使用yml,则需要指定为yml【3.2步骤 file-extension: yml #指定文件扩展名,默认为properties

    Data ID:

    Data ID Nacos 中的某个配置集的 ID。默认需要与所在服务的实例名一致。
    Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。
    
    Data ID 后缀默认是properties,如果你在配置文件不指定后缀,他默认就去找你服务实例名.properties配置文件。
    
    你可以通过配置来  指定你想加载的配置文件前缀与后缀。
    
    spring:
      application:
        name: springcloud-consumer
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
          config:
            server-addr: localhost:8848
            file-extension: yml   #后缀【文件类型】    
            prefix: springcloud-consumer   #前缀【文件名】
    

    Group:

    Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。
    当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP。
    
    如果你在配置文件不指定配置组,则默认去找DEFAULT_GROUP。
    
    如果你想指定加载哪个组的,你可在配置文件指定。
    
    server:
      port: 8003
    spring:
      application:
        name: springcloud-consumer
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
          config:
            server-addr: localhost:8848
            file-extension: yml
            prefix: springcloud-consumer
            group: CUSTOM_GROUP   # 加载 CUSTOM_GROUP 组下,文件名叫springcloud-consumer,文件类型为yml的配置文件。
    

    3.4 测试接口

    @RestController
    public class InfoController {
    	
    	@Value("${server.port}")
    	private String port;
    	
    	@Value("${key:''}")   // 是从配置中心得到的
    	private String key;
    	
    	@Value("${commonKey:''}")
    	private String commonKey;
    	
    	@Value("${shareInfo:''}")
    	private String shareInfo;
    	
    	@GetMapping(value = "/config")
    	public String config() {
    		return "Hello Nacos Config get " + key + "       getCommonValue:  " + commonKey + "      getShareInfo:  " + shareInfo;
    	}
    }
    

    3.5 补充namespace

    默认会有一个public空间,它不能被你删除。你在创建配置的时候,若不指定namespace,则默认叫DEFAULT_GROUP。

    如果你想加载指定空间的配置文件,可以在你的配置文件中指定。

    spring:
      cloud:
        nacos:
          config:
            server-addr: localhost:8848
            file-extension: yml
            prefix: springcloud-consumer
            group: CUSTOM_GROUP
            namespace: ff758179-90de-42fb-8be7-238f2be1443e
    


    4. Nacos的动态刷新 @RefreshScope

    Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法 。从而实现更改配置不需要重启服务。
    如果需要对 Bean 进行动态刷新。给类添加 @RefreshScope 进行自动刷新。

    @RestController
    @RefreshScope
    public class InfoController {
    	
    	@Value("${server.port}")
    	private String port;
    	
    	@Value("${key:''}")
    	private String key;
    	
    	@Value("${commonKey:''}")
    	private String commonKey;
    	
    	@Value("${shareInfo:''}")
    	private String shareInfo;
    	
    	@GetMapping(value = "/echo/{message}")
    	public String echo(@PathVariable(value = "message") String message) {
    		return "Hello Nacos Discovery " + message + ", i am from port " + port;
    	}
    	
    	@GetMapping(value = "/config")
    	public String config() {
    		return "Hello Nacos Config get " + key + "       getCommonValue:  " + commonKey + "      getShareInfo:  " + shareInfo;
    	}
    }
    
    
    当更改nacos的配置时,不需要重启服务。
    


    5. Nacos针对不同环境/服务的配置支持

    5.1 Nacos针对不同环境的配置支持

    在SpringBoot为我们开发时提供了不同环境的支持。只需要为不同的环境编写专门的配置文件,如:application-dev.yml、application-prod.yml, 启动项目时只需要增加一个命令参数 --spring.profiles.active=环境名称 即可。

    =====bootstrap.yml=====
    
    spring:
      application:
        name: nacos-web
      profiles:
        active: dev
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
          config:
            server-addr: localhost:8848
            file-extension: yaml #指定nacos配置中心的文件扩展名,默认为properties。支持:TEXT JSON XML YAML HTML Properties
            prefix: nacos-web
    
    server:
      port: 9100
    
    #健康检查
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    
    =====application-dev.yml=====
    
    server:
      port: 9101
    
    此时启动项目,访问的就不再是9100了。而是9101
    

    nacos也可以同时支持多环境配置。只需要在nacos配置中心中根据dataId进行区分即可。
    dataId 完整的拼接格式如下:

    ${prefix}-${spring.profiles.active}.${file-extension}
    
    
    prefix                     默认为 spring.application.name 的值,如果你想改,比如你的服务名叫app-service,你的配置文件想叫appapp-service,则可以通过配置 spring.cloud.nacos.config.prefix = ""来配置。
    spring.profiles.active     即为当前环境对应的 profile
    file-extension             为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。
    
    若要配置多环境支持,则创建的配置文件Data ID 必须按着规定的格式
    

    举例:现在要针对dev环境,创建其配置文件

    =====bootstrap.yml=====
    
    spring:
      application:
        name: nacos-web
      profiles:
        active: dev
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
          config:
            server-addr: localhost:8848
            file-extension: yaml #指定nacos配置中心的文件扩展名,默认为properties。支持:TEXT JSON XML YAML HTML Properties
            prefix: nacos-web
    server:
      port: 9100
    
    #健康检查
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    
    =====application-dev.yml=====
    
    server:
      port: 9101
    

    创建配置文件,nacos-web-dev.yml。为什么要叫这个名字?

    因为nacos规定了命名,只有按要求命名,才能找得到这个配置文件。当你以dev开发环境启动时,他就去找有没有 nacos-web-dev.yml 这个配置文件。有的话就加载。
    ${prefix}-${spring.profiles.active}.${file-extension}
    




    5.2 Nacos针对不同环境下配置信息的共享

    在开发中,虽然可以在不同环境下使用不同的配置文件,但是有一些配置是通用的,需要在不同的环境下,都进行生效。
    根据上述测试,可以发现,不同的开发环境下都会去加载nacos-web.yml,也就是没有指定特定环境的文件。那么对于通用配置就可以设置在这个文件中。

    @RestController
    @RefreshScope
    public class InfoController {
    	
    	@Value("${server.port}")
    	private String port;
    	
    	@Value("${key:''}")
    	private String key;
    	
    	@Value("${commonKey:''}")
    	private String commonKey;
    	
    	@Value("${shareInfo:''}")
    	private String shareInfo;
    	
    	@GetMapping(value = "/echo/{message}")
    	public String echo(@PathVariable(value = "message") String message) {
    		return "Hello Nacos Discovery " + message + ", i am from port " + port;
    	}
    	
    	@GetMapping(value = "/config")
    	public String config() {
    		return "Hello Nacos Config get " + key + "       getCommonValue:  " + commonKey + "      getShareInfo:  " + shareInfo;
    	}
    }
    
    此时访问    getCommonValue:  " + commonKey + "   就应该能获取到它的值了。
    

    5.3 Nacos针对不同服务应用间配置信息的共享

    在实际项目中,常常需要不同应用间配置共享。比如redis连接信息,很多服务都需要,那么就可以把这部分信息交给Nacos进行管理并且实现配置共享,从而实现配置的重用。
    编写配置文件,指定共享配置。

    spring:
      application:
        name: nacos-web
      profiles:
        active: dev #开发环境
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.200.128:8848
          config:
            server-addr: 192.168.200.128:8848
            file-extension: yaml #指定nacos配置中心的文件扩展名,默认为properties。支持:TEXT JSON XML YAML HTML Properties
            prefix: nacos-web
            
            shared-dataids: common.yml   #添加共享配置的dataId,如多个使用逗号分隔,并且越靠后,优先级越高。    文件后缀名不能少,只支持yaml,yml,properies
            
            refreshable-dataids: common.yml   #哪些共享配置支持动态刷新,如多个使用逗号分隔
            
            
    server:
      port: 9100
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    
    #日志
    logging:
      level:
        org.springframework.web: debug
    

    创建common.yml配置文件

    @RestController
    @RefreshScope
    public class InfoController {
    	
    	@Value("${server.port}")
    	private String port;
    	
    	@Value("${key:''}")
    	private String key;
    	
    	@Value("${commonKey:''}")
    	private String commonKey;
    	
    	@Value("${shareInfo:''}")
    	private String shareInfo;
    	
    	@GetMapping(value = "/echo/{message}")
    	public String echo(@PathVariable(value = "message") String message) {
    		return "Hello Nacos Discovery " + message + ", i am from port " + port;
    	}
    	
    	@GetMapping(value = "/config")
    	public String config() {
    		return "Hello Nacos Config get " + key + "       getCommonValue:  " + commonKey + "      getShareInfo:  " + shareInfo;
    	}
    }
    
    此时访问    getShareInfo:  " + shareInfo  就应该能获取到它的值了。
    



    6. Nacos加载多配置集

    前言:加载公共配置,上面已经讲了。如果现在你想加载多个配置集,那些多个配置集并不是要公共使用,只是你这个服务需要加载多个配置集。【使用要求限制:你要多加载的那几个配置必须在你的namespace空间里面。】

          config:
            server-addr: 127.0.0.1:8848
            file-extension: yaml
    
            extension-configs[0]:
              data-id: common-web-fixed.yaml
              refresh: true
    
            extension-configs[1]:
              data-id: common.yaml
              refresh: true
    
  • 相关阅读:
    无刷新跨域上传图片
    php框架-yii
    nginx-url重写
    linux下挂载移动硬盘ntfs格式
    页面有什么隐藏bug:字体,图片
    Oracle、MySql、SQLServer数据分页查询
    转载:Qt之界面实现技巧
    QT常用资料
    MySQL判断字段值来确定是否插入新记录
    WindowsAPI开发常用资料
  • 原文地址:https://www.cnblogs.com/itlihao/p/14840995.html
Copyright © 2011-2022 走看看