多年开发大牛用3700字带你搞懂阿里巴巴开源组件Nacos!

B站影视 内地电影 2025-05-23 15:37 2

摘要:本节将介绍阿里巴巴公司的开源组件Nacos。它具有简单、易用的特性,可以实现服务的发现、配置和管理等功能。Nacos的核心功能是服务,可以以此为中心提供配置等服务的基础设施平台。

本节将介绍阿里巴巴公司的开源组件Nacos。它具有简单、易用的特性,可以实现服务的发现、配置和管理等功能。Nacos的核心功能是服务,可以以此为中心提供配置等服务的基础设施平台。

Nacos作为开源的配置管理组件,可以无缝支持Spring Boot、Spring Cloud、Apache Dubbo和Kubernetes等主流的开源生态。Nacos的特性主要包括:

服务注册与发现:Nacos提供了多种方式注册微服务,如SDK和OpenAPI等,消费者可以通过API或Client方式进行服务发现与获取。

服务健康检查:Nacos提供对注册的服务进行实时健康检查的功能,以阻止向不健康服务实例或主机发送请求。Nacos支持TCP或HTTP方式的健康检查。对于云环境下的服务健康检查,Nacos提供了Agent上报模式和服务端主动检测两种健康检查模式。此外,Nacos还提供了健康检查仪表盘,帮助查看管理服务的可用性及流量。

服务可动态配置:Nacos可以动态管理所有环境下的服务配置。动态的配置方式使配置修改时无须重新部署,让配置管理变得更加方便和高效。Nacos提供了简单、易用的UI界面,可以帮助开发者管理所有的服务或程序的配置数据。管理平台提供了版本跟踪、一键回滚配置等一系列开箱即用的特性,能够更安全地在生产环境中变更配置信息。

动态DNS服务:动态DNS服务支持权重路由,可以方便地实现中间层负载均衡、路由策略、流量控制以及数据中心内网的简单DNS解析服务。

服务的元数据管理:Nacos管理所有服务的元数据,包括服务的描述信息、健康状态及生命周期等。

Nacos架构如图5.14所示。

Nacos提供了配置服务与服务管理的功能,同时提供了简单的UI界面。想要深入理解Nacos,还需要理解Nacos的一些基本概念。

1. 配置

在开发过程中,开发者通常会将一些固定的或变更的参数与变量从代码中抽离出来,一般是放在独立的文件中,如放在properties或YAML文件中,这些都属于配置信息。将不同环境的配置信息放在不同的文件中可以起到隔离作用,不会引起开发混乱。

2. 命名空间

命名空间(Namespace)可以粗粒度地配置隔离。不同的命名空间可以存在相同的组(Group)或Data ID的配置。Namespace的常用场景可以区分不同环境的配置,如对开发(dev)环境、测试(test)环境和生产(pro)环境的配置进行隔离。

3. 配置集ID

配置集ID(Data ID)也是划分配置的维度之一。Data ID通常是一个系统或者某个应用下的多个配置项的集合。Data ID通常采用${prefix}-${spring.profiles.active}. ${file-extension}的命名方式。

4. 配置分组

Nacos中的一组配置集是组织配置的维度之一。当在Nacos上创建一个配置时,默认的配置分组(Group)名称为DEFAULT_GROUP。配置分组通常以机房为区分粒度。

5. 服务

服务实际上是指一个应用服务。Nacos支持主流的服务生态,如Spring Boot、Spring Cloud、gRPC、Dubbo和Kubernetes Service。

6. 服务注册中心

服务注册中心是服务及元数据的数据库。服务在启动时会注册到服务注册表中,在关闭时会被注销。消费服务可以通过服务注册表查找服务的可用实例,实现服务的发现与实例获取。

7. 服务元数据

服务元数据是指服务端点(Endpoints)、服务标签、服务版本号、服务实例权重、路由规则和安全策略等描述服务的数据。

搭建Nacos有两种方式,一种是从GitHub上下载源码,另一种是直接下载稳定版本的zip包。下载源码的执行命令如下:

git clone https://github.com/alibaba/nacos.git

cd nacos/

mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U

ls -al distribution/target/

cd distribution/target/nacos-server-$version/nacos/bin

直接在官网上下载nacos-server-$version.zip包的执行命令如下:

unzip nacos-server-$version.zip

cd nacos/bin

或者用如下命令:

tar -xvf nacos-server-$version.tar.gz

cd nacos/bin

启动命令如下:

sh startup.sh -m standalone

或者采用JAR包的方式启动,命令如下:

java -Dnacos.standalone=true -jar nacos-server.jar启动之后的页面如图5.15所示。

图5.15 Nacos主页面

通过主页面左侧的菜单栏可以看到,Nacos提供了配置管理、服务管理、权限控制、命名空间及集群管理等功能。

Nacos为Spring Boot的使用者提供了Starter,即nacos-configspring-boot-starter和nacos-discovery-spring-boot-starter。

下面讲解Spring Boot集成Nacos的配置管理步骤。

(1)在pom.xml文件中添加依赖,代码如下:

com.alibaba.boot

nacos-config-spring-boot-starter

${latest.version}

(2)在application.yml文件中添加Nacos Server的地址,具体配置如下:

nacos:

config:

server-addr: 127.0.0.1:8848

(3)在Nacos的后台管理页面中添加Data ID为user的配置,配置数据为userName=zhangsan。具体配置详情如图5.16所示。

图5.16 配置详情

(4)使用@NacosPropertySource注解加载Data ID为user的配置源并开启自动更新功能,代码如下:

@SpringBootApplication

@NacosPropertySource(dataId = "user", autoRefreshed = true)

public class SpringBootExampleApplication {

public static void main(String args) {

SpringApplication.run(SpringBootExampleApplication.class,

args);

}

}

(5)通过Nacos的@NacosValue注解设置属性值,代码如下:

@RestController

@RequestMapping("/hi")

public class HiController{

//获取Nacos配置的属性值

@NacosValue(value = "${userName:default}", autoRefreshed

= true)

private String userName;

@GetMapping("/nacos/query")

public String nacosQuery {

return userName;

}

}

启动服务后访问http://localhost:8080/hi/nacos/query,将返回配置值zhangsan。

接下来讲解Spring Boot集成Nacos的服务发现步骤。

(1)调用Nacos提供的通用API向Nacos Server注册一个名为configService的服务。

图5.17 服务列表

(2)为应用添加依赖nacos-discovery-spring-boot-starter。

(3)修改application.yml文件,添加配置如下:

nacos:

discovery:

server-addr: 127.0.0.1:8848

(4)使用注解@NacosInjected注入Nacos的NamingService实例,代码如下:

@RestController

@RequestMapping("/hi")

public class HiController{

//注入NamingService

@NacosInjected

private NamingService namingService;

@GetMapping("/nacos/service")

public List nacosService(String serviceName)

throws

NacosException {

return namingService.getAllInstances(serviceName);

}

}

启动服务,访问接口http://localhost:8080/hi/nacos/service?serviceName=config Service即可返回服务详情。

使用Spring Cloud的开发人员如果要集成Nacos,则需要使用Spring Cloud的依赖包:spring-cloud-starter-alibaba-nacosconfig和spring-cloud-starter-alibaba-nacos-discovery。下面详细讲解Spring Cloud集成Nacos实现配置与服务发现的具体步骤。

(1)在pom.xml文件中添加依赖包,代码如下:

org.springframework.cloud

spring-cloud-starter-alibaba-nacos

config

0.2.1.RELEASE

discovery

0.2.2.RELEASE

(2)新建bootstrap.yml配置文件,并配置Nacos属性值,具体配置如下:

spring:

cloud:

nacos:

config:

server-addr: 127.0.0.1:8848

file-extension: properties

namespace: 08bf3070-fd90-4daa-aa2b-2cbd2140355c

group: config

discovery:

ip: ${HOST:}

port: ${PORT_80:${server.port:}}

group: config

heart-beat-timeout: 30

在Nacos Spring Cloud中,Data ID的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}

prefix默认为spring.application.name的值,也可以通过配置项spring.cloud. nacos.config.prefix来配置。

spring.profiles.active为当前环境对应的profile,详情可以参考Spring Boot文档。注意,当spring.profiles.active为空时,对应的连接符“-”将不存在,Data ID的拼接格式变成${prefix}.${file-extension}。

file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置,目前只支持properties和YAML两种类型。

在Nacos后台管理页面上需要新建一个dev的命名空间,并新建一个Data ID为configService. properties、Group为config的配置项,如图5.18所示。

图5.18 Nacos配置

(3)使用@EnableDiscoveryClient注解实现服务发现。服务启动后,Nacos管理后台自动进行服务发现,如图5.19所示。

图5.19 Nacos服务发现

@RestController

@RequestMapping("/hi")

@RefreshScope //自动刷新配置

public class HiController{

@Value("${userName:default}")

private String userName;

@GetMapping("/nacos/query")

public String nacosQuery {

return userName;

}

}

来源:大数据架构师

相关推荐