菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
174
0

SpringCloud 系列之 nacos

原创
05/13 14:22
阅读数 95138

简介

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()+"\n";
        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.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

发表评论

0/200
174 点赞
0 评论
收藏
为你推荐 换一批