• SpringCloud:注册中心nacos


    一、Nacos简介

            Nacos 英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即配置中心,service是指该注册/配置中心都是以服务为核心,是阿里巴巴的产品,相较于Eureka也是SpringCloud中的一个组件,但是比Eureka功能更加丰富 ,国内更受欢迎。同时社区和参考文档更加便捷,上手程度相较于其他注册中心(Eureka、consul)更加容易。

    二、下载和启动nacos服务

    1. 下载安装nacos

            Nacos下载地址:https://github.com/alibaba/nacos/releases

    2.启动nacos

            在安装目录中找到bin下面的startup.cmd

            命令:startup.cmd -m standalone

            注:nacos默认是集群cluster模式,启动时会报错:Caused by: java.net.UnknownHostException: jmenv.tbsite.net;目前使用单机模式启动来做使用学习。

     3.访问nacos管理平台

          http://localhost:8848/nacos 

     默认的账户密码:nacos/nacos

    三、引入包和配置

    1.在master项目中管理maven依赖

    (pom中管理包在<dependencyManagement></dependencyManagement>)

            在项目master的pom文件中管理了各开源包的pom管理

            <spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>

    1. <dependencyManagement>
    2. <dependency>
    3. <groupId>com.alibaba.cloud</groupId>
    4. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    5. <version>${spring-cloud-alibaba.version}</version>
    6. <type>pom</type>
    7. <scope>import</scope>
    8. </dependency>
    9. </dependencyManagement>

    其中springboot版本是<spring-boot.version>2.4.2</spring-boot.version>
    springcloud的版本是<spring-cloud.version>2020.0.2</spring-cloud.version>

    1. <!-- 核心依赖 -->
    2. <!--spring boot-->
    3. <dependency>
    4. <groupId>org.springframework.boot</groupId>
    5. <artifactId>spring-boot-dependencies</artifactId>
    6. <version>${spring-boot.version}</version>
    7. <type>pom</type>
    8. <scope>import</scope>
    9. </dependency>
    10. <!--spring cloud-->
    11. <dependency>
    12. <groupId>org.springframework.cloud</groupId>
    13. <artifactId>spring-cloud-dependencies</artifactId>
    14. <version>${spring-cloud.version}</version>
    15. <type>pom</type>
    16. <scope>import</scope>
    17. </dependency>

    2.在微服务各个子模块中添加nacos依赖 (引入包在pom中<dependencies></dependencies>)

    discovery依赖是用来服务的注册和发现

    1. # 引用nacos依赖
    2. <dependency>
    3. <groupId>com.alibaba.cloud</groupId>
    4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    5. </dependency>

    config依赖是用来配置中心的参数配置

    1. <dependency>
    2. <groupId>com.alibaba.cloud</groupId>
    3. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    4. </dependency>

    3.在模块项目中配置nacos

    1. spring:
    2. cloud:
    3. nacos:
    4. discovery: # 服务注册发现
    5. server-addr: 127.0.0.1:8848
    6. group: Cx # 自定义组
    7. namespace: a5c6e38b-e973-49a3-92b1-5f1811ca531a # nacos中自定义的命名空间对应id
    8. username: nacos
    9. password: nacos
    10. config: # 配置中心
    11. server-addr: ${spring.cloud.nacos.discovery.server-addr}
    12. group: Cx
    13. namespace: a5c6e38b-e973-49a3-92b1-5f1811ca531a # nacos中自定义的命名空间对应id
    14. file-extension: yaml
    15. username: ${spring.cloud.nacos.discovery.username}
    16. password: ${spring.cloud.nacos.discovery.password}
    17. timeout: 3000
    18. refresh-enabled: true # 开启自动刷新
    19. max-retry: 10

    4.注意事项

            在使用config配置中心的时候需要注意,配置需在bootstrap.yml中。需要引入bootstrap包

    1. <dependency>
    2. <groupId>org.springframework.cloud</groupId>
    3. <artifactId>spring-cloud-starter-bootstrap</artifactId>
    4. </dependency>

    四、配置中心的使用

    Demo

    1.编写访问controller,添加注释@Vaulue

    注:由于有些配置没有写在程序的yml配置文件中,仅在nacos配置中有,使用@Value时会出错提示,如name不能解析不存在等问题,所以在name后面加上:符号,表示初始化默认值,避免启动报错。

    1. package com.cx;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.cloud.context.config.annotation.RefreshScope;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.RestController;
    6. @RestController
    7. @RequestMapping("/config")
    8. @RefreshScope
    9. public class ConfigController {
    10. @Value("${name:}")
    11. public String name;
    12. @Value("${gloab:}")
    13. public String gloab;
    14. @RequestMapping("/name")
    15. public String name(){
    16. return name;
    17. }
    18. @RequestMapping("/gloab")
    19. public String gloab(){
    20. return gloab;
    21. }
    22. }

    2.在nacos中添加配置文件

            在nacos管理后台,添加配置文件,如下图:

     注:Data Id命名:应该与springboot项目中应用名相同(spring.application.name=Cx),且配置多个文件时如-dev、-prod等,用-隔开,原理同springboot中application.yml、application-dev.yml相同。

    大家可以注意在启动springboot项目时,控制台会输出:(大家可以留意一下)

    Ignore the empty nacos configuration and get it based on dataId[Cx] & group[Cx]
    Ignore the empty nacos configuration and get it based on dataId[Cx.yaml] & group[Cx]
    Ignore the empty nacos configuration and get it based on dataId[Cx-dev.yaml] & group[Cx]

    3. 测试效果

            启动上述demo,并访问ip:port/config/name,获取配置的name查看返回结果,同时也可以试试当nacos配置文件中name值发生改变后,再次访问接口,结果也发生改变。

            注:@RefreshScope这个注解需要加上,刷新缓存配置。

    五、服务发现和注册

            在springboot项目中添加了discovery包后,并在配置文件yml或properties中配置了discovery的地址和相关信息。在启动类中加入注解@EnableDiscoveryClient,开始启动。(所述相关配置在上面都有代码)

             服务启动成功后,打开nacos后台查看服务管理-服务列表,则可以查看到注册上去的服务信息了。        

  • 相关阅读:
    杭电多校-Shortest Path in GCD Graph-(二进制容斥+优化)
    如何在2023年学习React
    Linux的linux aarch64和linux x86_64
    高并发研究
    IDEA常用的一些插件
    单元测试llll
    在生产中部署ML前需要了解的事
    JAX安装
    支付宝小程序授权/获取用户信息
    PMP提分练习
  • 原文地址:https://blog.csdn.net/qq_25223941/article/details/125309266