SpringCloud Alibaba Nacos注册中心文档

举报
测试-开发阿泽 发表于 2022/12/25 22:19:26 2022/12/25
【摘要】 本篇笔记是我根据SpringCloud Alibaba Nacos官方文档学习整理而来,主要是对Nacos注册中心的部署、Nacos Server的动态配置及Nacos Server的服务注册与发现的一个官方Demo的学习,Demo很简单,主要是为了先搭建我的第一个微服务工程,若是也有在自学微服务的码友,可以互勉,互相进步!

一、前言

本篇笔记是我根据SpringCloud Alibaba Nacos官方文档学习整理而来,主要是对Nacos注册中心的部署、Nacos Server的动态配置及Nacos Server的服务注册与发现的一个官方Demo的学习,Demo很简单,主要是为了先搭建我的第一个微服务工程,若是也有在自学微服务的码友,可以互勉,互相进步!
Nacos官方文档地址:https://nacos.io/zh-cn/docs/quick-start.html

二、Nacos注册中心部署

1.下载最新的Nacos:

2.解压nacos-server-1.4.3.tar.gz:tar -xvf nacos-server-$version.tar.gz
3. 进入解压后的bin文件夹中并执行启动命令:cd nacos/bin

  • Linux:sh startup.sh -m standalonebash startup.sh -m standalone
  • Windows:startup.cmd -m standalone

4.测试:访问http://localhost:8848/nacos/,进入Nacos 注册中心页面,用户名密码均为nacos
5. 关闭nacos注册中心:Linux:sh shutdown.sh Windows:shutdown.cmd
【注意】 :

  • 启动命令中standalone表示单机启动,新版Nacos默认是集群启动,故需要加上该参数;
  • 也可以直接打开startup.sh,将export MODE="cluster"改为export MODE=“standalone”;

三、Nacos Spring Cloud快速开始

主要从以下两个方面来演示:

  1. 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
  2. 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

3.1 创建父工程版本依赖

  1. 新建空的Maven项目(删除src)命名为springcloud,然后在pom中配置依赖作为父依赖;

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        
    
        <groupId>org.myapps</groupId>
        <artifactId>springcloud</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!--父工程下的子模块,自动生成-->
        <modules>
            <module>springcloud-nacos-7001</module>
            <module>nacos-config-8001</module>
            <module>springcloud-nacos-consumer-8080</module>
        </modules>
        
        <!--打包方式:pom-->
        <packaging>pom</packaging>
        <!--依赖版本配置-->
        <properties></properties>
        <!--依赖管理-->
        <dependencyManagement>
            <dependencies>
                <!-- 对spring-cloud版本统一管理-->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>2021.0.0</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!-- 对spring-boot版本统一管理-->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>2.6.3</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <!-- 对spring-cloud-alibaba版本统一管理-->
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2021.1</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    </project>
    

3.2 Nacos Server配置动态变更

  1. 在父工程下新建Module,命名为nacos-config-8001,并添加依赖(版本继承父依赖版本)

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>
    
  2. Nacos 配置管理 dataId字段格式:$ {prefix}-$ {spring.profiles.active}.$ {file-extension};

  • prefix默认为spring.application.name的值,也可以通过spring.cloud.nacos.config.prefix来配置;
  • spring.profiles.active为当前环境对应的 profile,当spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension};
  • file-exetension为配置内容的数据格式,可以通过spring.cloud.nacos.config.file-extension来配置。目前只支持 properties(默认)和 yaml 类型。
  1. 在 bootstrap.properties 中配置 Nacos Server 的地址和应用名;

    spring.profiles.active=dev   #指定开发环境
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848  #nacos注册中心地址
    spring.application.name=nacos-config   #应用名,对应dataId字段的prefix
    spring.cloud.nacos.config.file-extension=properties   #默认就是properties,可不配置,或配置为yaml
    #dataId的prefix=nacos-config,spring.profiles.active=dev,file-extension=properties,最终dataId=nacos-config-dev.properties
    
    spring.cloud.nacos.config.namespace=Public    #默认为Public命名空间,可省略
    spring.cloud.nacos.config.group=DEFAULT_GROUP #指定配置群组,若是Public命名空间,则可省略
    
  2. Controller层通过原生注解@RefreshScope实现配置自动更新;

    @RestController
    @RequestMapping("/config")
    @RefreshScope   //实现配置的自动更新
    public class ConfigController {
        @Value("${userLocalCache:false}")
        private boolean useLocalCache;
        @RequestMapping("/get")
        public  boolean get(){
            return useLocalCache;
        }
    }
    
  3. 发布配置:dataId为nacosConfig.properties,内容为useLocalCache=true;
    在这里插入图片描述

  4. 测试:访问http://localhost:8080/config/get,返回结果为true。

3.3 Nacos Server注册与发现

3.3.1创建服务提供者

  1. 在父工程下新建Module,命名为springcloud-nacos-7001,并添加依赖(版本继承子父依赖版本);

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>springcloud</artifactId>
            <groupId>org.myapps</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>springcloud-nacos-7001</artifactId>
        <!--以下是该Module需要的最少的依赖,可根据情况添加数据库、日志、MyBatis等依赖-->
        <dependencies>
            <!--springboot依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--nacos依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
            </dependency>
        </dependencies>
    </project>
    
  2. 配置提供者的服务器信息及注册中心信息;

    server:
        port: 7001   #服务提供者的服务器端口号7001
    spring:
      application:
        name: nacos-server-provider     #服务提供者在注册中心的实例名称
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848  #要注册到注册中心的地址
    
  3. Controller层;

    @RestController
    @RequestMapping("/provider")
    public class NacosProviderController {
        //SpringCloud定义了DiscoveryClient接口用于服务发现,可获取注册中心所有的服务实例
        @Resource
        private DiscoveryClient discoveryClient;
        @GetMapping("/getService")
        public List<ServiceInstance> getService(){
            List<ServiceInstance> list = discoveryClient.getInstances("nacos-server-provider");
            return list;
        }
        @GetMapping("/get/{text}")
        public String hello(@PathVariable("text") String text){
            return "Welcome to Nacos , "+text;
        }
    }
    
  4. 启动类添加注解@EnableDiscoveryClient, 用于开启服务注册发现功能;

    @SpringBootApplication
    @EnableDiscoveryClient  //开启服务注册发现功能
    public class NacosProvider7001 {
        public static void main(String[] args) {
            SpringApplication.run(NacosProvider7001.class,args);
        }
    }
    
  5. 运行启动类,将服务提供者注册到Nacos注册中心,可访问http://localhost:8848/nacos/,查看是否成功注册进服务中心。

3.3.2创建服务消费者

  1. 在父工程下新建Module,命名为springcloud-nacos-consumer-8080,并添加依赖(继承父依赖版本);

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>springcloud</artifactId>
            <groupId>org.myapps</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>springcloud-nacos-consumer-80</artifactId>
         <!--以下是该Module需要的最少的依赖,可根据情况添加其他依赖-->
        <dependencies>
            <!--springboot依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--nacos依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
            </dependency>
        </dependencies>
    </project>
    
  2. 配置消费者的服务器信息及注册中心信息;

    server:
      port: 8080    #服务消费者的服务器端口号8080
    spring:
      application:
        name: nacos-server-consumer     #注册中心服务器实例名称
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848  #要注册到注册中心的地址
    
  3. 配置RestTemplateConfig,将RestTemplate交给Bean容器管理;

    @Configuration
    public class RestTemplateConfig {
        @Bean
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }
    
  4. Controller层;

    @RestController
    @RequestMapping("/consumer")
    public class NacosConsumerController {
        @Resource
        private RestTemplate restTemplate;   //注入RestTemplate
        @GetMapping("/getService")
        public List<ServiceInstance> getService(){
            return restTemplate.getForObject("http://localhost:7001/provider/getService", List.class);
        }
        @GetMapping("/get/{text}")
        public String hello(@PathVariable("text") String text){
            return restTemplate.getForObject("http://localhost:7001/provider/get/" + text, String.class);
        }
    }
    
  5. 启动类添加注解@EnableDiscoveryClient, 用于开启服务注册发现功能

    @SpringBootApplication
    @EnableDiscoveryClient  //开启服务注册发现功能
    public class NacosConsumer8080 {
        public static void main(String[] args) {
            SpringApplication.run(NacosConsumer8080.class,args);
        }
    }
    
  6. 运行启动类,将服务消费者注册到Nacos注册中心,可访问http://localhost:8848/nacos/

  7. 测试:

【注意】 :测试之前要保证开启Nacos、开启服务提供者和服务消费者。

Nacos服务注册中心为SpringCloud Alibaba中的一个环节,主要用于不同服务之间的解耦,可以将来自不同服务器上的服务都发布到注册中心,满足后并发的需求。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。