目录
Nacos 配置中心的实现(以spring cloud项目为例):
Nacos 的简介:
Nacos是阿里巴巴开发的配置中心和注册中心,在Nacos之前,其实还有很多相同的产品,比如注册中心:Eureka,Consul, zookeaper;配置中心:Config、apollo等,他们的功能都是单一的,要不是注册中心要不是配置中心,而Nacos不同,他同时兼有配置和注册两种服务功能;
Nacos 可以理解成服务注册中心和配置中心的组合体,它可以替换Eureka作为服务注册中心,实现服务的注册与发现;还可以替换Spring Cloud Config作为配置中心,实现配置的动态刷新;Nacos 的命名是由 3 部分组成:
注册中心:注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用;
配置中心:当微服务较多时,管理每个服务的配置信息比较困难,尤其是当我们想要在服务启动过程中将新的配置信息生效时更加困难了,这时候就有了配置中心的概念,将每个服务的管理配置文件的功能抽离出来,专门交给一个服务去管理,这个服务呢就是配置中心;
Nacos 的特性:
1.服务发现:
Nacos 支持基于 DNS 和 RPC 的服务发现。当服务提供者使用原生 SDK、OpenAPI 或一个独立的 Agent TODO 向 Nacos 注册服务后,服务消费者可以在 Nacos 上通过 DNS TODO 或 HTTP&API 查找、发现服务。
2.服务健康监测:
Nacos 提供对服务的实时健康检查,能够阻止请求发送到不健康主机或服务实例上。Nacos 还提供了一个健康检查仪表盘,能够帮助我们根据健康状态管理服务的可用性及流量。
3.动态配置服务:
动态配置服务可以让我们以中心化、外部化和动态化的方式,管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效、敏捷。配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
Nacos 提供了一个简洁易用的 UI 帮助我们管理所有服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助我们更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
4.动态 DNS 服务:
Nacos 提供了动态 DNS 服务,能够让我们更容易地实现负载均衡、流量控制以及数据中心内网的简单 DNS 解析服务。Nacos 提供了一些简单的 DNS APIs TODO,可以帮助我们管理服务的关联域名和可用的 IP:PORT 列表。
5.服务及其元数据管理:
Nacos 能让我们从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及 metrics (应用性能监控)统计数据。
SLA(Service-Level Agreement),也就是服务等级协议,指的是系统服务提供者(Provider)对客户(Customer)的一个服务承诺。这是衡量一个大型分布式系统是否“健康”的常见方法,最常见的四个SLA指标,可用性、准确性、系统容量和延迟;
Nacos 两大组件:
Nacos 也采用 CS(Client/Server,客户端/服务器)架构,它包含两大组件:
Nacos 服务注册中心:
Nacos 作为服务注册中心可以实现服务的注册与发现,实现流程如下图:
1.服务注册中心(Register Service):它是一个 Nacos Server,可以为服务提供者和服务消费者提供服务注册和发现功能。
2.服务提供者(Provider Service):它是一个 Nacos Client,用于对外服务。它将自己提供的服务注册到服务注册中心,以供服务消费者发现和调用。
3.服务消费者(Consumer Service):它是一个 Nacos Client,用于消费服务。它可以从服务注册中心获取服务列表,调用所需的服务。
Nacos 实现服务注册与发现的流程:
1)安装和运行 Nacos Server:
1. 从 Nacos 官方提供的下载页面中,下载 Nacos Server 并运行
2. 下载完成后,解压 nacos-server-2.0.3.zip
Nacos Server 下各目录说明如下:
- bin:用于存放 Nacos 的可执行命令。
- conf:用于存放 Nacos 配置文件。
- target:用于存放 Nacos 应用的 jar 包。
3. 打开命令行窗口,跳转到 Nacos Server 安装目录的 bin 下,执行以下命令startup.cmd -m standalone(windows系统),sh startup.sh -m standalone(Linux/Unix/Mac),standalone以单机模式启动 Nacos Server ,默认是集群模式;
4. 使用浏览器访问“http://localhost:8848/nacos”,跳转到 Nacos Server 登陆页面
5. 在登陆页输入登录名和密码(默认都是 nacos),点击提交按钮,跳转到 Nacos Server 控制台主页
2)搭建服务提供者(以spring cloud项目为例):
服务提供者 Nacos Client 启动时,会把服务以服务名(spring.application.name)的方式注册到服务注册中心(Nacos Server);
1. 在 pom.xml 文件中添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${latest.version}</version>
</dependency>
#注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本
2. 在 application.properties 中配置 Nacos server 的地址和应用名
server.port=8070
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分在 Nacos Spring Cloud 中,dataId 的完整格式如下:${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型
3. 通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
@RestController
class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}
4. 启动 spring-cloud项目,使用浏览器访问“http://localhost:8848/nacos”,查看“服务管理”下的“服务列表”,服务提供者 已经被注册到了 Nacos Server 上了;
3)搭建服务消费者(以spring cloud项目为例):
服务消费者 Nacos Client 启动时,也会将自己的服务注册到服务注册中心;服务消费者在注册服务的同时,它还会从服务注册中心获取一份服务注册列表信息,该列