Nacos知识详解+Nacos项目实战

一、概述

Nacos是一种开源的分布式系统服务发现、配置和管理平台,可以帮助应用实现服务注册、发现和负载均衡,同时也可以方便地管理配置信息。它支持多种语言和多种环境,比如Kubernetes、Spring Cloud、Dubbo等,并提供了Web界面和API接口供用户管理服务和配置信息。

二、功能

1. 服务注册和发现:当应用需要调用其他服务时,可以通过Nacos进行服务注册和发现,以便于应用之间可以相互通信。

2. 服务配置管理:当应用需要动态配置时,可以使用Nacos进行配置管理,动态配置包括修改配置、发布新的配置,并且支持实时生效,不需要重启应用。

3. 服务路由和负载均衡:当应用需要进行负载均衡时,可以使用Nacos进行服务路由和负载均衡。

4. 集群管理:Nacos可以用于管理多个应用节点,包括它们的服务注册和发现、配置管理等,从而实现集群管理。

5. 配置中心:Nacos可以作为一个配置中心,可以在应用程序之间共享配置,包括关于应用程序的配置、环境变量和其他相关信息。

从上面不难看出,Nacos一下子干掉了Spring Cloud的三大组件,分别是:注册中心Eureka、服务配置Config、服务总线Bus。

Nacos=Eureka+Config+Bus 

 Nacos知识详解+Nacos项目实战_第1张图片

 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。现如今在市场上也是非常受欢迎的。

三、Nacos和Config

Nacos和Config都是阿里巴巴开源的配置中心产品,它们的主要功能是都是集中管理和动态配置各种服务的配置信息,但是它们在实现方式和一些特性上有所不同。

  1. 数据存储方式:

    • Nacos使用MySQL、Oracle、Derby等作为底层存储,同时支持内存存储,可以很好地支持大量数据的存储和快速检索。
    • Config使用Git、SVN等作为底层存储,可以根据版本管理来实现配置的修改和回滚。
  2. 支持的配置格式:

    • Nacos支持多种配置格式,包括Properties、YAML、XML、JSON等,提供了强大的配置管理能力。
    • Config主要支持Properties和YAML两种配置格式,不支持其他格式,但是它可以与Spring Cloud Config配合使用来实现云平台的配置管理。
  3. 动态刷新能力:

    • Nacos支持动态配置刷新,当配置项被修改时,会自动通知到客户端,使得应用可以动态地加载新的配置。
    • Config也支持动态配置刷新,但是需要使用Actuator来实现。
  4. 架构特点:

    • Nacos使用多节点架构,可以保证高可用性和数据一致性,同时支持分布式部署和动态扩容。
    • Config默认使用单节点架构,需要手动进行扩展和高可用性的部署。
  5. 社区生态:

    • Nacos目前在社区上比较活跃,有较多的开发者和用户参与,提供了较好的技术支持和社区资源。
    • Config相对而言在社区上的发展较为缓慢,但是由于它是Spring Boot默认的配置中心,所以在Spring Boot生态系统中应用广泛。

四、Nacos和Eureka

Nacos和Eureka都是服务发现和注册中心,但它们有以下几点主要区别:

  1. 数据存储方式:Nacos使用可插拔的存储模块,支持多种存储方式,包括MySQL、Oracle、MariaDB和MongoDB等,而Eureka默认使用内存方式进行存储。

  2. 服务健康检查:Nacos支持TCP、HTTP和MySQL等多种方式的健康检查,而Eureka只支持HTTP方式的健康检查。

  3. 动态配置管理:Nacos提供了动态配置管理功能,可以实现配置的动态推送和变更,而Eureka并不支持此功能。

  4. 服务网格支持:Nacos提供了服务网格化的支持,可以和Istio等服务网格进行集成,而Eureka并不支持服务网格化。

  5. 开发活跃度:Nacos由阿里巴巴开发维护,目前已经成为Apache基金会的顶级项目,拥有大量的开发人员和社区支持,而Eureka已经进入维护模式,后续开发可能会较少。

五、Nacos的命名空间Namespace ,DataID,Group。

1.Namespace 

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。默认namespace=public的保留空间,不支持删除;默认情况下。

Nacos给的最佳实践表明,最外层的namespace是可以用于区分部署环境的,比如test,dev,prod等。

注意:命名空间可用于进行不同环境的配置隔离。一般一个环境划分到一个命名空间。

Nacos知识详解+Nacos项目实战_第2张图片

2.DataID

Nacos 中的某个配置集的 ID,配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。

注意:在系统中,一个配置文件通常就是一个配置集。一般微服务的配置就是一个配置集。

DataId的拼接格式

  • prefix:默认为 spring.application.name 的值。
  • spring.profiles.active:即为当前环境对应的 profile。
  • file-extension:文件后缀

Nacos知识详解+Nacos项目实战_第3张图片

3.Group

Nacos中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串对配置集进行分组,从而区分Data ID相同的配置集。当您在 Nacos上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP 。

六、动态刷新

配置的动态刷新,仅需要使用@RefreshScope注解即可。可见项目实战中创建接口步骤中引入的注解。

七、项目实战

1.创建项目(cloud-nacos-provider),引入依赖包


     org.springframework.boot
      spring-boot-starter-web
    
    
      org.springframework.boot
      spring-boot-starter-actuator
    
    
      com.alibaba.cloud
      spring-cloud-starter-alibaba-nacos-config
    
    
      com.alibaba.cloud
      spring-cloud-starter-alibaba-nacos-discovery
    
    
      org.projectlombok
      lombok
    
    
      org.springframework.cloud
      spring-cloud-starter-bootstrap
    
  

 2.编写主启动类NacosApplication

package com.qs;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
 * 主启动类
 */
@SpringBootApplication
@EnableDiscoveryClient
@Slf4j
public class NacosApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosApplication.class,args);
        log.info("*********NacosApplication 启动成功*********");
   
    }

}

3.创建配置文件bootstrap.yml,注意是bootstrap.yml,而不是appliction

因为Nacos同SpringCloud-Config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。SpringBoot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。


spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      discovery:
        server-addr: 120.55.12.82:8848
      config:
        #服务器地址
        server-addr: 120.55.12.82:8848
        #默认为Public命名空间,可以省略不写 #对应建立的命名空间的UUID
        namespace: e02ca678-6def-4faa-bf19-56661b7cba43
        #指定文件后缀
        file-extension: yaml
        #文件名 -- 如果没有配置则默认为 ${spring.appliction.name}
        prefix: ${spring.application.name}
        #指定配置群组 --如果是Public命名空间 则可以省略群组配置
        group: DEFAULT_GROUP
  profiles:
    active: dev
server:
  port: 8848

注意:

  • spring.application.name:可以看到必须可少的配置项
  • spring.cloud.nacos.discovery.server-addr:指定注册中心的地址,如果你不需要注册该服务,也可以去掉该项,并删除discovery依赖
  • spring.cloud.nacos.config.server-addr:指定配置中心的地址
  • file-extension:指定配置中心中配置文件的格式

4.创建接口测试是否能读取nacos中的配置。当然先要在nacos创建配置。

新建配置,点击发布。

 Nacos知识详解+Nacos项目实战_第4张图片

创建接口

package com.qs.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//动态获取配置
@RefreshScope
@RestController
@RequestMapping("nacos")
public class NacosController {
//获取配置中的config
    @Value("${nacos.config}")
    private String config;

    @GetMapping("index")
    public String index() {
        return config;
    }
}

5.启动项目,测试接口。如下图返回nacos中的配置,则表示成功。

Nacos知识详解+Nacos项目实战_第5张图片

你可能感兴趣的:(nacos,java,linux,bootstrap)