本文为学习笔记,主要用于记录本人学习过程。部分内容为转载!!!!.
一 Nacos快速入门
什么是 Nacos
Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
为什么是Nacos
常见的注册中心:
-
-
Eureka(原生,2.0遇到性能瓶颈,停止维护)
-
Zookeeper(支持,专业的独立产品。例如:dubbo)
-
Consul(原生,GO语言开发)
-
Nacos
-
相对于 Spring Cloud Eureka 来说,Nacos 更强大。
Nacos = Spring Cloud Eureka + Spring Cloud Config
Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config
-
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更
-
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现
可以干什么
Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。
Nacos主要提供以下四大功能:
-
-
服务发现和服务健康监测
-
动态配置服务
-
动态DNS服务
-
服务及其元数据管理
-
Nacos快速开始
结构图:
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:
-
64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
-
64 bit JDK 1.8+
-
Maven 3.2.x+
下载及安装
1.从 Github 上下载源码方式
1 2 3 4 5 6 7 8 |
|
2.下载源码压缩包方式
从 最新稳定版本 下载 nacos-server-$version.zip
包
1 2 |
|
启动nacos服务
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
1 |
|
Windows
启动命令:
1 |
|
或者双击startup.cmd运行文件。
访问:http://localhost:8848/nacos
用户名密码:nacos/nacos
二 Nacos注册中心入门
创建两个工程,一个是nacos-provider, 另一个是naocos-consumer;
添加nacos-provider的依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
添加nacos-consumer依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
- provider基本代码
1 2 3 4 5 6 7 8 |
|
application.yml
1 2 3 4 5 6 7 8 9 |
|
在启动类上添加@EnableDiscoveryClient注解
- consumer基本代码
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 |
|
application.yml
1 2 3 4 5 6 7 8 9 |
|
在启动类添加@EnableFeignClients,@EnableDiscoveryClient注解
调用结果:
文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery
三 Nacos入门配置中心
在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。
如果微服务架构中没有使用统一配置中心时,所存在的问题:
-
配置文件分散在各个项目里,不方便维护
-
配置内容安全与权限
-
更新配置后,项目需要重启
nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动
nacos与 Spring Cloud的整合:
1.在 Nacos Spring Cloud 中,
dataId
的完整格式如下:
1 |
|
-
prefix
默认为所属工程配置spring.application.name
的值(即:nacos-provider),也可以通过配置项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
来配置。目前只支持properties
和yaml
类型;默认为properties
;
即 dataId 为 配置所属工程的spring.application.name的值 + "." + properties/yml;
官方文档:
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
2.配置内容:
项目中易变的内容
-
从配置中心读取配置
添加依赖:
1 2 3 4 5 |
|
版本说明 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
在 bootstrap.yml
中配置 Nacos server 的地址和应用名
1 2 3 4 5 6 7 |
|
注意:bootstrap.yml添加了spring.application.name,在appliation.yml不需要再添加;
之所以需要配置 spring.application.name
,是因为它是构成 Nacos 配置管理 dataId
字段的一部分。在springboot工程中,bootstrap.properties的加载优先级更高
1 2 3 4 5 6 7 8 9 10 11 12 |
|
调用结果:
- 名称空间切换环境
在实际开发中,通常有多套不同的环境(默认只有public),那么这个时候可以根据指定的环境来创建不同的 namespce,例如,开发、测试和生产三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。以此来实现多环境的隔离;
可以发现有四个名称空间:public(默认)以及我们自己添加的3个名称空间(prod、dev、test),可以点击查看每个名称空间下的配置文件,当然现在只有public下有一个配置。
默认情况下,项目会到public下找 服务名.properties
文件。
接下来,在dev名称空间中也添加一个nacos-provider.properties配置。这时有两种方式:
-
切换到dev名称空间,添加一个新的配置文件。缺点:每个环境都要重复配置类似的项目
-
直接通过clone方式添加配置,并修改即可(推荐)
编辑
在服务提供方nacos-provider中切换命名空间,修改bootstrap.yml添加如下配置
1 2 3 4 5 |
|
namespace的值为:
重启服务,调用结果:
-
回滚配置
-
加载多配置文件
偶尔情况下需要加载多个配置文件。假如现在dev名称空间下有三个配置文件:nacos-provider.properties、redis.properties、jdbc.properties
nacos-provider.properties默认加载,怎么加载另外两个配置文件?
在bootstrap.yml文件中添加如下配置:
1 2 3 4 5 6 7 8 9 10 |
|
修改上面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
-
配置的分组
在实际开发中,除了不同的环境外。不同的微服务或者业务功能,可能有不同的redis及mysql数据库,也就说每个微服务项目可能会有相应的开发环境,测试环境,预发环境,生产环境等;
区分不同的环境我们使用名称空间(namespace),区分不同的微服务或功能,使用分组(group)。
也可以反过来使用,名称空间和分组只是为了更好的区分配置,提供的两个维度而已;
新增一个redis.properties,所属分组为nacos-provider:
现在开发环境中有两个redis.propertis配置文件,一个是默认分组(DEFAULT_GROUP),一个是provider组
默认情况下从DEFAULT_GROUP分组中读取redis.properties,如果要切换到nacos-provider分组下的redis.properties,需要修改如下配置:
1 2 3 4 5 6 7 8 9 10 11 |
|
————————————————————————————
原文地址1:https://www.cnblogs.com/coder-zyc/p/12821732.html
原文地址2:https://www.cnblogs.com/coder-zyc/p/12821777.html
原文地址3:https://www.cnblogs.com/coder-zyc/p/12821932.html