Nacos详细使用流程

1.Nacos入门
  • 到官网下载Nacos

  • 在下载好的Nacos文件夹下的conf文件夹里找到application.properties文件,打开文件配置对应的端口号server.port=8848

  • 在下载好的Nacos文件夹下的bin文件夹中使用终端打开执行命令startup.cmd -m standlone进行启动,如果是PowerShell终端,就输入.\startup.cmd -m standalone进行启动,默认用户名和密码都是nacos

  • 打开对应的微服务项目,在父工程中添加spring-cloud-alibaba的管理依赖

  •     <!--nacos的管理依赖-->
               <dependency>
                   <groupId>com.alibaba.cloud</groupId>
                   <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                   <version>2.2.5.RELEASE</version>
                   <type>pom</type>
                   <scope>import</scope>
               </dependency>
    
  • 在子工程中添加nacos的客户端依赖

  •     <!--nacos客户端依赖包-->
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
           </dependency>
    
  • 在子工程中的appication.yml文件中配置信息

  • spring:
      cloud:
        nacos:
          server-addr: localhost:8848 # nacos服务地址
    
2.服务多级存储模型
  • 服务尽可能选择本地集群的服务,跨集群调用延迟较高,本地集群不访问时再去访问其他集群

  • spring:
    	cloud:
            nacos:
              server-addr: localhost:8848 # nacos服务地址
              discovery:
                cluster-name: SH #集群名称
    
  • 配置完成后点击服务详情

  • Nacos详细使用流程_第1张图片

  • Nacos详细使用流程_第2张图片

3.负载均衡
  • 默认是轮询的负载均衡规则

  • 修改application.yml文件,修改负载均衡的规则,优先选择本集群,再进行随机选择

  • userservice:
      ribbon:
        NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
    
4.服务实例的权重设计
  • Nacos控制台可以设置实例的权重值,0-1之间
  • 同集群内的多个实例,权重越高被访问的频率越高
  • 权重设置为0则完全不会被访问
  • 当我们想对应用进行版本升级的时候,可以将一个实例的权重设置为0,然后进行升级,先给予0.001(较小的权重)用于测试升级版本的稳定性,再逐渐放大权重占比
5.环境隔离
  • namespace用来做环境隔离
  • 每个namespace都有唯一id
  • 不同namespace下的服务不可见

实现流程

  • 新建命名空间

  • 在这里插入图片描述

  • 在对应的application.yml文件中添加namespace

  • cloud:
      nacos:
        server-addr: localhost:8848 # nacos服务地址
        discovery:
          cluster-name: HZ
          namespace: 
    
6.nacos注册中心原理
  • 服务提供者分为临时实例和非临时实例

  • 临时实例采用心跳监测,检测不到,直接去除掉

  • 非临时实例主动发请求,若服务提供者挂掉了,会视为不健康状态,会等待修复

  • nacos主动推送变更信息push,检测消费者

配置临时实例和非临时实例流程

  • 在application.yml文件中添加ephemeral配置
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      discovery:
        cluster-name: HZ
        namespace: 4a6fe0e3-8a0f-40a9-b55d-a59e0914d2af
        ephemeral: false # 是否是非实例
7.Nacos配置管理
7.1添加配置
  • 打开Nacos

  • 在这里插入图片描述

  • 右边加号进行添加配置

  • 新建配置注意事项

    1. Data ID不能唯一,一般命名规则为 服务器实例名称+开发环境+后缀
    2. 配置格式,目前支持YAML和Properties,通常选择TAML,这个我们经常叫yml,但在第一条注意事项中后缀要写yaml
    3. 配置内容只需要写类似于开关的配置信息,例如:是否为临时实例等,像数据库的连接这些就没必要进行添加
  • Nacos详细使用流程_第3张图片Nacos详细使用流程_第4张图片

7.2配置拉取
  • 获取的步骤

  • Nacos详细使用流程_第5张图片

  • 引入Nacos的配置管理客户端依赖

  • <!--nacos的配置管理依赖-->
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
           </dependency>
    
  • 建立bootstrap.yml文件

  • spring:
      application:
        name: userservice
      profiles:
        active: dev #环境
      cloud:
        nacos:
          server-addr: localhost:8848 # nacos地址
          config:
            file-extension: yaml # 文件后缀名
    
  • 删除application.yml和bootstrap.yml相同的配置

  • 测试

  • 在Controller中添加代码获取配置

  •     @Value("${pattern.dateformat}")
        private String dateformat;
    
        @GetMapping("now")
        public String now() {
            return LocalDateTime.now().format(
                    DateTimeFormatter.ofPattern(dateformat, Locale.CHINA)
            );
        }
    
  • 启动后访问对应的地址

  • 在这里插入图片描述

  • 于我们在Nacos中添加的配置对应–成功

  • pattern:
        dateformat: yyyy-MM-dd HH:mm:ss
    
8.实现热更新

Nacos中的配置文件变更后,微服务无需重启就可以感知

  • 方式一

  • 在@Value注入的变量所在类上添加注解@RefreshScope

  • 当我们修改配置的时候,查看控制会出现,检测到配置修改的日志

  • 09-24 11:30:57:696  INFO 8564 --- [-localhost_8848] c.a.n.client.config.impl.ClientWorker    : [fixed-localhost_8848] [data-received] dataId=userservice-dev.yaml, group=DEFAULT_GROUP, tenant=null, md5=c6e896e251552a493dbf917a13552d76, content=pattern:
        dateformat: yyyy年MM月dd日 HH:mm:ss, type=yaml
    
  • 方式二

  • 新建立配置文件Config.PatternProperties并添加配置

  • package cn.itcast.user.config;
    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Data
    @Component
    @ConfigurationProperties(prefix = "pattern")    
    public class PatternProperties {
        
    	// 你定义prefix的值加上你设置的变量的值和Nacos中一样即可
       
        private String dateformat;
        
    }
    
  • 在Controller添加配置

  •     // 注入
        @Autowired
        private PatternProperties properties;
        
           @GetMapping("now")
        public String now() {
            return LocalDateTime.now().format(
                    DateTimeFormatter.ofPattern(properties.getDateformat(), Locale.CHINA)
            );
        }
    
  • 更推荐使用第二种方式

9.多环境配置共享

试想一个问题:如果当我们想添加一个配置,所有配置文件中相同的,难道我们要都写一份吗?当我们想修改一个配置的时候,我们难道要将所有的配置文件都修改一遍吗?

答案当然是不用

我们可以配置环境共享文件

  • 在Nacos中添加配置文件

  • Nacos详细使用流程_第6张图片

  • 在Config.PatternProperties中添加private String envShardValue;

  • 在Controller中新添加接口

  •     @Autowired
        private PatternProperties properties;
    
        @GetMapping("prop")
        private PatternProperties properties() {
            return properties;
        }
    
  • 测试成功,拿到了共享配置中的配置

  • 在这里插入图片描述

  • 配置文件的优先级:服务名-profile.yaml > 服务名称.yaml > 本地配置

你可能感兴趣的:(微服务,java)