irpas技术客

springcloud-alibaba(三.nacos-配置中心)_xiaoyouyouaaa

未知 7255

文章目录 为什么会有配置中心?部署Nacos配置中心使用Nacos配置中心Nacos分类部署同一配置文件,指定不同环境修改默认命名空间修改默认组修改默认DataId Nacos持久化部署(Windows下)Nacos配置Mysql数据库单机模式(Windows下)

为什么会有配置中心?

项目里一般都有配置文件(如application.yaml), 在项目中定义配置文件,最大的缺陷: 如果在生产环境正在运行的时候突然需要修改配置文件的话,必须重启我们的服务器。(生产环境中是不能使用热部署的)

这时候就有了配置中心:

使用专门的服务器统一存放管理我们整个的微服务的配置文件, 能够完全动态实现对我们配置文件修改、新增,是不需要重启我们的服务器。

分布式框架有

SpringConfig, 第一代cloud使用,没有界面Nacos, 第二代cloud使用,轻量级携程阿波罗, 专门用于配置中心, 重量级

Nacos的配置中心, 注册中心都部署在同一个应用上

分布式配置中心实现原理:

本地应用读取我们云端分布式配置中心文件(第一次会建立长连接)本地应用读取到配置文件之后,本地jvm和硬盘中都会缓存一份本地应用与分布式配置中心服务器端直保持长连接当我们的配置文件发生变化 (通过MD5|版本号实现区分),将变化结果通知给我们的本地应 用, 及时的刷新我们的配置文件

部署Nacos配置中心

启动nacos服务器, nacos需要提前配置jdk1.8以上环境(可能需要重启), 然后http://127.0.0.1:8848进入nacos管理页面

maven依赖

版本和spring-cloud-alibaba保持一致就行

<!-- nacos配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>${spring.cloud.alibaba.version}</version> </dependency>

yaml

server: port: 8002 spring: application: name: nacos-provider cloud: nacos: discovery: server-addr: http://127.0.0.1:8848 # nacos服务器的地址 config: file-extension: properties # 扩展文件类型, nacos中只能为其扩展此类文件 me: # 自定义,用来测试 name: 8081 age: 20

给主程序添加注解**@RefreshScope**, 用于Nacos动态刷新

@RefreshScope // Nacos动态刷新 @SpringBootApplication public class NacosProvider2{ public static void main(String[] args){ SpringApplication.run(NacosProvider2.class, args); } } 使用Nacos配置中心

进入配置管理–配置列表

点击右上角的加号, 新增一项配置

DataId是服务名称-代码阶段.配置文件类型, 如nacos-provider-dev.yaml

注意文件名称官网规定为: s p r i n g . a p p l i c a t i o n . n a m e ? {spring.application.name}- spring.application.name?{profile}. ${file-extension:properties}

当yaml文件中没有指定profile时, 可以省略为**${spring.application.name}. ${file-extension:properties}**

${file-extension:properties} 表示 file-extension默认类型为properties

选择配置格式

编写配置的内容, 选的是什么格式,就如何编写

一个小坑: nacos只支持yaml不支持yml, 并且两者不能混合使用

点击发布, 该服务对应的配置文件内容就更新了

用nacos发布一项配置相当于在nacos中重写了一个持久性的yaml或者properties文件

Nacos分类部署

nacos对一项配置的管理分为多层, 这也是它相对于springconfig的独特之处

层次英文解释作用默认值命名空间namespace用来区分部署环境: 开发, 生产, 测试public组groupDEFAULT_GROUP服务service功能相关联的一群微服务集群(使用相同的DataId)cluster用来装作用相同的多个微服务DEFAULT

分类概述图:

同一配置文件,指定不同环境

修改bootstrap.yaml文件, 指定激活的部署环境

spring: profiles: active: dev # 指定是什么环境下的部署

bootstrap.yaml比application.yaml文件优先级高, 所以可以用来指定激活环境

然后在nacos中添加一项配置, DataId是nacos-provider-dev.properties(nacos-provider是服务名), 表示是dev环境下的, 这时这两者就相对应了

同理如果配置文件改成test环境:

spring: profiles: active: test # 指定是什么环境下的部署

可以再添加一项配置: DataId是nacos-provider-test.properties

这样就实现了统一配置文件的不同部署环境的轻松切换

修改默认命名空间

这个就简单很多了, 先在bootstrap.yaml文件中修改默认命名空间:

spring: cloud: nacos: config: namespace: dev

注意: 这个配置(包括后面的配置组,DataId)只能在bootstrap中修改才有效

再在nacos中的命名空间中新建一个命名中心dev(默认是public), 再在dev下新建它的配置, DataId为nacos-provider.properties

修改默认组

也是一样, 先在bootstrap.yaml文件中修改默认组:

spring: cloud: nacos: config: group: DEV_GROUP

再在nacos中新建一项它的配置,DataId为nacos-provider.properties, Group为DEV_GROUP

修改默认DataId

默认的DataId的格式是 s p r i n g . a p p l i c a t i o n . n a m e ? {spring.application.name}- spring.application.name?{profile}. ${file-extension:properties}

但也可以在bootstrap文件中指定:

# config external configuration # 1. Data Id is in the default group of DEFAULT_GROUP, and dynamic refresh of configurations is not supported. spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties # 2. Data Id is not in the default group, and dynamic refresh of configurations is not supported. spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP # 3. Data Id is not in the default group and dynamic referesh of configurations is supported. spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP spring.cloud.nacos.config.ext-config[2].refresh=true 可以看到不仅可以改默认DataId, 还可以配置多个DataId(事实上没必要)ext-config[n]中的越高, 这个DataId的优先级越高(nacos中配置不同DataId的配置项可能相互冲突) Nacos持久化部署(Windows下)

Nacos支持三种部署模式:

单机模式 - 用于测试和单机试用。集群模式 - 用于生产环境,确保高可用。多集群模式 - 用于多数据中心场景。

Nacos也要有集群?

如果只有一台Nacos服务器(http://127.0.0.1:8848), 性能很差, 容易出现单点故障

持久化部署?

默认Nacos使用嵌入式数据库实现数据的存储。所以,虽然可以基本实现持久化(重启Nacos服务器或者主机都能持久化), 但是如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。

Nacos配置Mysql数据库 单机模式(Windows下)

先在数据库中新建nacos_config(名称不能更改)数据库, 然后在nacos目录下找到conf/nacos-mysql.sql文件, 执行该脚本文件, 会生成nacos需要的数据表

找到conf/applicaion.properties文件,添加以下配置:

spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&serverTimezone=UTC&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=root

mysql8.0之后的版本 需要加上时区的配置: serverTimezone=UTC

会发现之前在嵌入式数据库中配置的内容都不见了, 这时发布一项配置,会在数据库nacos_config中的config_info表中找到对应的行


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #nacos实现配置中心功能