一、介绍

Nacos是阿里巴巴最新开源的项目,核心定位是“一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台”,项目地址:https://nacos.io/zh-cn/ Nacos核心提供两个功能:服务注册与发现,动态配置管理。
在这里插入图片描述

Nacos核心提供两个功能:服务注册与发现,动态配置管理。

1、服务注册与发现

Nacos提供基于DNS和基于RPC的服务发现,即能被用来支持https/http的服务注册与发现,也支持RPC如dubbo的服务注册与发现。

与Dubbo使用的zookeeper相比而言,两者差异还是比较大的,zookeeper是一种分布式的协调服务,它天生是作为分布式数据一致性场景下的解决方案,所以zookeeper是CP的,它牺牲了可用性来保证一致性,在极端情况下(master选举期间)服务会对外停止,对于服务可用性要求比较高的系统是难以接受的。Nacos是一种去中心化的架构,属于CAP理论里的AP架构,支持最终一致性,在分布式服务发现与注册场景下具有很不错的性能。目前dubbo官方也支持使用Nacos代替zookeeper。

2、动态配置服务

动态修改配置并实时生效对于服务端的同学而已并不陌生,这种服务能够让我们的服务拥有更多的灵活性,不需要重启服务即可做到配置实时生效,非常适合于“配置优先”的服务开发。

3、选型方面

Nacos是2018年阿里开源的分布式配置中心和注册中心,我们是有必要去了解去使用的现代化技术。能够成为现在流行的技术组件,也有其很多优点,比如对于Apollo、Eureka、Consul等注册中心相比,Nacos在性能上更优,轻量级的实现。Nacos整个生态圈是比较完善的,只是提供的配置及其他方面没有那么完整。其实,对于一个企业来说,具体项目中使用根据实际场景去选型最优为基准,尽量折中去选。

服务注册中心对比:
在这里插入图片描述
服务配置中心对比:
在这里插入图片描述

二、Nacos安装

准备环境:JDK1.8、Maven(其实这个可以省咧)、Linux/Mac

首先先下载好安装包: nacos-server-1.1.4.tar.gz(通常使用1.1.4版本及以上)

然后,上传到云服务器或其他服务器。

#解压nacos安装包
tar -zxvf nacos-server-1.1.4.tar.gz
#由于没有配置集群,非集群启动,即单机片启动
./startup.sh -m standalone
#通过该命令能够确认nacos是否启动成功
netstat -antp		#查看所有端口,可以看到8848默认端口运行中
#浏览器访问
http:ip:8848/nacos

安装好了,我们进行下面的操作~

三、动态配置服务
1、首先,新建一个springboot项目,引入nacos依赖到项目中
<dependency>    
    <groupId>com.alibaba.cloud</groupId>    
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、在resources目录下新建bootstrap.yml文件
spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      config:
        #配置中心地址
        server-addr: 39.108.146.20:8848
        #配置方式yml,目前仅支持properties/yaml
        file-extension: yml
        #默认开启自动刷新
        refresh-enabled: true
        #不同组可以有相同的属性
        group: dev
        #可以根据配置环境不同相互隔离
#        namespace: pro
  main:
    allow-bean-definition-overriding: true
3、nacos配置中心新建yaml格式配置文件

配置信息如图:
在这里插入图片描述
解释一下:

1、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 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

2、group(配置组):在不同组中可以有相同的dataId

3、namespace(命名空间):可以隔离区分不同的环境配置文件,如:dev、test、pro、uat等环境

4、配置格式:暂时仅支持yaml、properties格式文件

5、配置内容:也就是你要配置的一些数据库敏感信息,能够实现动态获取配置。

配置完成以后如图:
在这里插入图片描述

通过客户端动态获取配置信息:

在springboot启动类中加上@RefreshScope注解,实现动态刷新获取配置,代码如下:

package com.ht.nacos;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
@RefreshScope
public class NacosDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosDemoApplication.class, args);
    }

    @Value("${test.name}")
    private String name;

    @Value("${test.age}")
    private Integer age;

    /**
     * 测试配置
     * @return
     */
    @GetMapping("test")
    public String testConfig(){
        return name+" : "+age;
    }

}

在这里通过@Value注解就能够动态获取到nacos配置信息:

我们启动项目访问一下,如下图:
在这里插入图片描述

可以看到获取成功了!然后我们在nacos中修改一下配置文件信息是否会动态刷新~

如下图:
在这里插入图片描述

重新访问一下,如图:
在这里插入图片描述

从上面能够看出来确实实现了动态刷新与访问,到这里简单的动态获取配置信息就完成了。

四、服务注册与发现
1、首先引入nacos注册中心依赖:
 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 </dependency>
2、完整的bootstrap.yml配置文件
spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      config:
        #配置中心地址
        server-addr: 39.108.146.20:8848
        #配置方式yml,目前仅支持properties/yaml
        file-extension: yml
        #默认开启自动刷新
        refresh-enabled: true
        #不同组可以有相同的属性
        group: dev
        #可以根据配置环境不同相互隔离
      discovery:
        server-addr: 39.108.146.20:8848
#        username: nacos
#        password: $2a$10$pxs77T/88cjff7zFKQlIheFQaVFDKBzQafrBgE.GnQ/EYKO0MMpgC
        register-enabled: true
        enabled: true
        watch:
          enabled: true
        watch-delay: 30000
        heart-beat-interval: 3000
        heart-beat-timeout: 30000
        group: dev
        service: ${spring.application.name}
        weight: 1
        secure: false
  #        namespace: pro
  main:
    allow-bean-definition-overriding: true

在项目启动类中加上@EnableDiscoveryClient注解,否则启动会报错!!!

配置完成以后,启动项目,如下图:
在这里插入图片描述
此时服务列表多了一个服务,到这里服务的注册与发现就简单的实现了。

最后,附上完整代码地址:

码云:https://gitee.com/liao_hanlin/ProjectDirectory/tree/dev/nacos-demo

github: https://github.com/mbql/ProjectDirectory/tree/dev/nacos-demo

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐