Nacos注册中心和配置中心的使用

一、Nacos注册中心&配置中心

1、什么是服务的注册和发现

  • 治理中心(注册中心):nacos服务器就是治理中心,它里面要注册所有的微服务,生成一个服务列表
  • 服务注册:nacos客户端要连接注册中心,将自己的信息注册到服务列表中,自己的信息包括:application.name、IP、port
  • 服务发现:每个客户机会从nacos治理中心下载服务列表,从服务列表中获取其他微服务连接信息
  • 心跳机制:客户机会每隔5秒连接一次注册中心,注册中心开启线程检查每个服务最后一次连接的时长是否超过30秒,如果超过就会从服务列表中把相关服务移除

注册中心架构两个角色

  • Nacos Server:服务注册中心

    • 注册中心:Server作为服务注册功能的服务器,是服务注册中心,系统中的其他微服务,使用nacos客户端连接到Nacos Server并且维持心跳连接,这样系统的维护人员就可以通过Nacos Server来监控每个微服务是否正常运行

  • Nacos Client:服务客户端

    • 客户端:Nacos Client是一个Nacos客户端,用于跟Nacos Server的交互,在应用启动后,将会向Nacos Server发送心跳(默认周期为5秒)

      Nacos Client会缓存服务注册表中的信息,这种方式有一定的优势,首先可以降低Server的压力,其次当所有的Server宕机,服务调用依然可以完成调用。

心跳检测:Nacos Client会在启动后发送一次心跳检测并注册到注册列表上,然后每隔5秒都去联系一次注册中心,注册中心每次接收到客户端心跳请求后都会记录接收时间,然后服务器端会开启一个定时线程查看所有的客户端最新心跳时间,超过15秒的客户端标记不健康服务,超过30秒的客户端从注册列表中移除。

2、安装Nacos

准备环境

  • 64 bit JDK 1.8+
  • Maven 3.2.x+

nacos目录结构

  • bin:启动Nacos服务的脚本目录
  • conf:Nacos的配置文件目录
  • target:Nacos的启动依赖存放目录
  • data:Nacos启动成功后保存数据的目录

Linux安装

下载Nacos
解压缩Nacos
启动安装服务
./startup.sh -m standalone

window安装

在cmd中执行startup.cmd -m standalone 或者双击 startup.cmd运行文件

在这里插入图片描述

3、访问Nacos

访问nacos的web服务管理界面:http://localhost:8848/nacos

用户名:nacos

密码:nacos

在这里插入图片描述

二、开发服务注册到Nacos

  • 引入nacos client依赖

    • <!--引入nacos client的依赖-->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      
  • 配置注册地址

    • # 指定服务名称
      spring.application.name= coding-product
      # 指定nacos服务地址
      spring.cloud.nacos.server-addr= localhost:8848
      # 指定注册中心地址
      spring.cloud.nacos.discovery.server-addr= ${spring.cloud.nacos.server-addr}
      
  • 设置启动服务注册注解

    • @SpringBootApplication
      @EnableDiscoveryClient // 新版本SpringCloud默认开启服务注册和发现,可以省略不写
      public class ProductApplication {
      
          public static void main(String[] args) {
      
              SpringApplication.run(ProductApplication.class,args);
      
          }
      }
      
  • 启动项目

  • 查看nacos服务列表
    在这里插入图片描述

  • 设置并发启动
    在这里插入图片描述
    在这里插入图片描述

三、配置中心Nacos

目前项目的问题:

  • 各个微服务散落在各个服务器上,修改配置文件的时候,需要找到每个服务器去修改
  • 修改完配置文件后,需要重启服务器让配置生效

配置中心可以解决这些问题:

配置中心可以把所有的微服务的配置信息统一在一个地方进行管理,这样修改的时候就不用到各个服务器上去找配置文件了,并且修改完会自动刷新生效。

  • 引入nacos-config依赖
    • <!--引入配置中心依赖-->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      </dependency>
      
  • 创建bootstrap.properties并配置
    • #application里面就可以去除该配置项了
      spring.cloud.nacos.server-addr=localhost:8848
      # 去指定nacos地址读取配置
      spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.server-addr}
      # 读取配置的分组
      spring.cloud.nacos.config.group=DEFAULT_GROUP
      # 指定读取文件后缀
      spring.cloud.nacos.config.file-extension=properties
      # 指定读取文件的具体环境,application-prod
      spring.profiles.active=prod
      

bootstrap.properties和application.properties区别

springboot在启动的时候会优先读取bootstrap配置文件,启动到后期才会读取application配置文件。那在项目启动初期,我们就需要springboot知道项目的配置信息在配置中心的哪个文件里面。所以我们需要把配置中心的配置信息配置到bootstrap文件里面。bootstrap文件的写法给application一致。也可以是properties文件也可以是yml文件。如果bootstrap和application里面都配置有相同的配置项,application会把bootstrap里面的覆盖掉。

  • application-prod内容

    • # 应用名称
      #spring.application.name= coding-product
      # 应用路径
      server.servlet.context-path= /coding-product
      # 端口号
      server.port=8080
      
      # 指定服务名称
      spring.application.name= coding-product
      
      # 指定nacos服务地址
      # spring.cloud.nacos.server-addr= localhost:8848
      # 指定注册中心地址
      # spring.cloud.nacos.discovery.server-addr= ${spring.cloud.nacos.server-addr}
      # 用于测试,在接口中获取数据
      user.username= test 
      
  • 商品服务测试接口

    • @RestController()
      @RefreshScope
      public class ProductController {
      
          @Value("${user.username}")
          private String username;
      
          @GetMapping("/product")
          public String getProduct(){
              return "商品服务测试..."+username;
          }
      
      
      }
      
  • 创建配置
    在这里插入图片描述

    在这里插入图片描述

    • DataId

    用来读取远程配置中心的中具体配置文件其完整格式如下: p r e f i x − {prefix}- prefix{spring.profile.active}.${file-extension}

    • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
    • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}
    • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
      在这里插入图片描述
  • 配置自动配置刷新

    默认情况下nacos已经实现了自动配置刷新功能,如果需要刷新配置,可以直接在控制器中加入@RefreshScope注解即可

    • @RestController()
      @RefreshScope
      public class ProductController {
      
          @Value("${user.username}")
          private String username;
      
          @GetMapping("/product")
          public String getProduct(){
              return "商品服务测试..."+username;
          }
      
      
      }
      
  • 更改配置之前访问
    在这里插入图片描述

  • 更改配置之后访问
    在这里插入图片描述
    在这里插入图片描述

使用配置中心的好处:

  • 统一管理,不用再每个项目中去找配置文件了
  • 可以修改完毕后,不用重启服务,配置项自动生效
  • 15
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘程云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值