• SpringCloud 系列之 nacos


    简介

    nacos简单来说就是一个服务注册和配置中心,我们可以像使用其它注册中心一样使用它,它也可以当作配置中心,可以实现SpringCloud Config和SpringCloud Bus 一样的功能,可以实现在线的项目信息配置。本文主要讲述其作为注册中心和配置中心的快速上手的用法。

    使用

    使用说明

    本文是在windows环境下进行并使用的,读者也可以根据自己的需要在Linux下单独部署或者使用docker进行部署,不过docker下或者Linux下需要对其进行相应的修改,还要注意对应的端口安全组是否开放,集群版的话,数据存储配置是否正常,Linux内存是否够用,因为集群版会发生反复重启的现象,有兴趣的可以自己去研究一下。本文是单机windows下进行部署的,其实集群版也不是很复杂,不过存留的bug比较多,就不做了,因为环境不同,我这可能正常你那里可能就不行了。

    下载并启动

    由于官网说1.3.1比较稳定,我就下载了1.3.1版本的(Linux下我用的是0.9的)

    https://github.com/alibaba/nacos/releases/tag/1.3.1

    这里我选择的是windows版的1.3.1.zip 读者可自行选择

    然后下载完成以后,我们需要对其减压,然后进行配置信息的修改:

    • 数据持久化
    • 单机版集群版的选择

    数据持久化

    打开压缩包,然后进行到conf文件夹下,我们找到如图这两个文件:
    如果想要数据持久保存,配置文件的信息下一次还想要使用的话,我们可以进行数据库配置,如果不想,请忽略数据持久化配置

    在MySQL数据库中,根据nacos-mysql.sql 中信息,创建对应的数据库及表,然后进入到 application.properties 文件中进行数据库配置:
    去掉对应的注释并添加数据库信息。

    ### Count of DB:
     db.num=1
    
    ### Connect URL of DB:
     db.url.0=jdbc:mysql://你的数据库连接信息:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
     db.user=root
     db.password=123456
    

    单机版集群版的选择

    进入到bin 文件夹下,找到startup.cmd 并进行编辑,单例默认不用修改,看一下就行,集群需要对截图红色部分进行对应的修改:


    启动

    双击 bin/startuo.cmd 文件进行启动。

    访问

    输入网址进行访问(账号密码都为nacos),如果你进行了对应的修改,请输入你修改后的文件

    http://localhost:8848/nacos/

    配置中心的用法

    首先创建一个Springcloud项目 springcloud-nacos-config-demo,并引入依赖pom:

    (由于有父pom来做版本管理,所以这里没有写版本,详情请在项目地址中查看)

    <dependencies>
            <!--SpringCloud Alibaba nacos 注册中心-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <!-- nacos config-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
            <!--常用的web-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--spring boot 的健康检测-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    </dependencies>
    

    编写配置文件application.yml

    server:
      port: 3377
    spring:
      profiles:
        active: devs
      application:
        name: springcloud-nacos-config-demo
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #Nacos服务注册中心地址
          config:
            server-addr: localhost:8848 #Nacos作为配置中心地址
            file-extension: yaml #指定yaml格式配置
            group: DEVS_GROUP
            namespace: ba55d245-23bd-4244-ae2e-6392f30a2945
    

    启动类加注解

    @EnableDiscoveryClient

    编写用例去获取在nacos中的配置:

    @RestController
    @RefreshScope //支持Nacos的动态刷新功能。
    public class DemoController {
    
        @Value("${myserver.name}")
        private String name;
    
        /**
         * 获取 nacos 中的配置信息
         * @return
         */
        @GetMapping("getConfigInfo")
        public String getConfigInfo(){
            return name;
        }
    }
    
    

    nacos编写配置文件

    配置文件的映射关系

    启动项目进行访问

    http://localhost:3377/getConfigInfo

    可以看到已经获取到值了

    服务注册

    创建一个springboot项目 springcloud-nacos-client-a,并且导入pom:

            <!--SpringCloud Alibaba nacos 注册中心-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <!--常用的web-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--spring boot 的健康检测-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <!--热加载插件,可不加-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <!--日志插件,可不加-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <!--test插件,可不加-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.5.4</version>
            </dependency>
    

    添加application.yml配置文件

    server:
      port: 7777
    
    spring:
      application:
        name: springcloud-nacos-client-a
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848  #配置的Nacos地址(本机的写localhost:8848,服务器的写IP地址)
    
    management:
      endpoints:
        web:
          exposure:
            include: '*'
    

    启动类加注解

    @EnableDiscoveryClient

    添加服务调用ribbon 的配置

    @Configuration
    public class ApplicationContextConfig {
        @Bean
        @LoadBalanced    //ribbon 服务调用
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    }
    

    编写测试用例

    @RestController
    public class UserController {
    
        public static final String URL="http://springcloud-nacos-client-b";
        @Value("${server.port}")
        private String serverPort;
        @Value("${spring.application.name}")
        private String serverName;
    
        @Autowired
        RestTemplate restTemplate;
    
        @GetMapping("/getServerInfo/{name}")
        public String getServerInfo(@PathVariable("name")String name){
            String result ="服务名:"+serverName+" 端口:"+serverPort+" 时间戳:"+ DateUtil.now()+"
    ";
            if("a".equals(name)){
                return result;
            }else {
                return result+ "实际请求地址:"+restTemplate.getForObject(URL+"/getServerInfo/"+name,String.class);
            }
    
        }
    }
    

    仿照 springcloud-nacos-client-a 创建springcloud-nacos-client-b ,并修改其对应的配置文件和端口号

    启动nacos服务,springcloud-nacos-client-a 和springcloud-nacos-client-b

    在nacos 的服务列表,我们可以看到我们注册的服务:

    服务调用

    a 调用 a

    a 调用 b

    b 调用 a

    b 调用 b

    项目地址

    关于项目的地址,有兴趣的可以自行下载
    git@gitee.com:anxc/study-demo-eureka.git

    参考文档:

    https://nacos.io/zh-cn/docs/quick-start.html

    https://www.cnblogs.com/gchh/p/13724416.html
    https://www.freesion.com/article/7939864046/
    https://www.pianshen.com/article/25711907017/
    https://www.pianshen.com/article/2236929088/
    https://blog.csdn.net/qq_20667511/article/details/107378047

  • 相关阅读:
    org.dom4j.DocumentException: Error on line 1 of document: 前言中不允许有内容
    学习过程中的随手笔记
    IT技术团队行而有效的管理之道
    九宫格抽奖HTML+JS版
    Nginx负载均衡深入浅出
    PHP 二维数组根据某个字段排序
    MYSQL INSERT INTO SELECT 不插入重复数据
    小米2成功使用google组件的办法(为了coc游戏能登录google账户)
    PHP 数组排序方法总结
    普通标和转让标的回款和还款日期的算法。
  • 原文地址:https://www.cnblogs.com/Anxc/p/14203551.html
Copyright © 2020-2023  润新知