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 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。现如今在市场上也是非常受欢迎的。
Nacos和Config都是阿里巴巴开源的配置中心产品,它们的主要功能是都是集中管理和动态配置各种服务的配置信息,但是它们在实现方式和一些特性上有所不同。
数据存储方式:
支持的配置格式:
动态刷新能力:
架构特点:
社区生态:
Nacos和Eureka都是服务发现和注册中心,但它们有以下几点主要区别:
数据存储方式:Nacos使用可插拔的存储模块,支持多种存储方式,包括MySQL、Oracle、MariaDB和MongoDB等,而Eureka默认使用内存方式进行存储。
服务健康检查:Nacos支持TCP、HTTP和MySQL等多种方式的健康检查,而Eureka只支持HTTP方式的健康检查。
动态配置管理:Nacos提供了动态配置管理功能,可以实现配置的动态推送和变更,而Eureka并不支持此功能。
服务网格支持:Nacos提供了服务网格化的支持,可以和Istio等服务网格进行集成,而Eureka并不支持服务网格化。
开发活跃度:Nacos由阿里巴巴开发维护,目前已经成为Apache基金会的顶级项目,拥有大量的开发人员和社区支持,而Eureka已经进入维护模式,后续开发可能会较少。
1.Namespace
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。默认namespace=public的保留空间,不支持删除;默认情况下。
Nacos给的最佳实践表明,最外层的namespace是可以用于区分部署环境的,比如test,dev,prod等。
注意:命名空间可用于进行不同环境的配置隔离。一般一个环境划分到一个命名空间。
2.DataID
Nacos 中的某个配置集的 ID,配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。
注意:在系统中,一个配置文件通常就是一个配置集。一般微服务的配置就是一个配置集。
DataId的拼接格式
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创建配置。
新建配置,点击发布。
创建接口
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中的配置,则表示成功。