之前在学习cloud的时候,也接触到了nacos,只不过那时候更多的是测试了nacos和cloud的无缝连接,也就是nacos能够集成cloud的一些落地技术栈,例如Feign、Ribbon等,包括cloud里面的一些注解,测试demo也上传到了git上面。
https://github.com/wcyzxs/nacos-demo.git
这次正好跟着b站上面的项目,进一步对nacos进行了学习。先简单介绍下nacos吧,nacos是阿里巴巴下面的一套微服务框架,而cloud则是spring下面的一套微服务框架,现在更多的偏向使用nacos来作为项目的微服务架构。
就我个人而言,觉得nacos之所以越来越流行,有两点优势吧。1.cloud的eureka在18年就已经不在维护了,社区活跃度也许久没有更新了。而nacos也是具有服务注册与发现这个功能的。2.某个微服务部署成集群的话,那么要是修改一个配置,那么所有服务上面的配置都要更改,是比较麻烦的。而nacos的其中一个很大的优势就是能够统一管理服务的配置文件,可以实现配置的实时动态获取,以及配置共享。意思就是说如果我5个服务的配置都是一样的,那么我在nacos上面配置一个配置文件,然后5个服务可以统一引入该配置,并且要是修改信息的话,我们只需要在nacos上面修改即可。对应的微服务项目只要加个注解就可以实现实时获取了,这个是真的很方便。下面就依次介绍下这两个核心功能吧。
nacos服务注册与发现
1.引入依赖
<!--将服务注册进nacos中--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
2.application.yml添加以下配置
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
3.启动类上面添加@EnableDiscoveryClient注解
最后启动项目,然后界面输入127.0.0.1:8848/nacos即可,登录进去后即可在服务管理->服务列表下面就可以发现被注册的服务。(这里关于nacos的安装我就不说了,网上也有教程)
nacos的统一配置管理
在介绍nacos配置管理之前,先简单介绍下nacos关于配置的几个相关概念,如命名空间、组。
/
* 1)、命名空间:配置隔离;
* 默认:public(保留空间);默认新增的所有配置都在public空间。可以有两种不同命名形式
* 1、开发,测试,生产:利用命名空间来做环境隔离。
* 注意:在bootstrap.properties;配置上,需要使用哪个命名空间下的配置,
* spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871
* 2、每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置
* 2)、配置集:所有的配置的集合
* 3)、配置集ID:类似文件名;也就是nacos上面的Data ID
* Data ID:类似文件名
* 4)、配置分组:
* 默认所有的配置集都属于:DEFAULT_GROUP;
* 可以根据需要,自行再建组
* 项目中的使用:每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod
* 3、同时加载多个配置集
* 1)、微服务任何配置信息,任何配置文件都可以放在配置中心中
* 2)、只需要在bootstrap.properties说明加载配置中心中哪些配置文件即可
* 3)、@Value,@ConfigurationProperties。。。
* 以前SpringBoot任何方法从配置文件中获取值,都能使用。
* 配置中心有的优先使用配置中心中的,
*
*例如
*#配置命名空间
*#spring.cloud.nacos.config.namespace=c88cfe3a-4a32-420c-be50-c3f086852e6f
*#配置分组(当命名空间按照微服务划分的时候,我们可以建立多个组,用来归类开发、测试、生产环境)
*#spring.cloud.nacos.config.group=dev
*/
下面开始具体使用
1.引入依赖
<!--nacos配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
2.创建一个bootstrap.properties文件
spring.application.name=项目名
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
3.在登录进127.0.0.1:8848/nacos的那个界面后,添加配置
配置的名称,其实在项目启动的时候,即可知道nacos默认读取项目的配置是项目名.properties,所以添加配置的时候,也可以直接项目名.properties的形式添加。(yml也可以),并在里面添加配置信息。
4.在bootstrap.properties里面引入nacos上面的配置(具体可以根据实际场景,决定怎么使用命名空间,我下面的是以服务作为命名空间,组作为dev、test、prod的区分)
spring.application.name=gulimall-coupon spring.cloud.nacos.config.server-addr=127.0.0.1:8848 #配置命名空间 spring.cloud.nacos.config.namespace=c88cfe3a-4a32-420c-be50-c3f086852e6f #配置分组 spring.cloud.nacos.config.group=dev
5.获取配置
SpringBoot任何方法从配置文件中获取值,都能使用。
传统的一个yaml里面可能配置了数据源、mybatis、redis等相关信息的配置集,那么现在有了命名空间和组的概念,我们可以将其分离,比如datasource.yml,mybatis.yml等,随后在bootstrap.properties里面一个个引入即可,如下面所示。这样还有一个好处是我这个datasource.yml可以实现共享,倘若微服务没有分库,那么可以多个微服务引用同一个数据源,还是比较方便的。
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml spring.cloud.nacos.config.ext-config[0].group=dev #动态刷新,这样在nacos上面更改配置的话,就可以实时刷新了,默认值是false spring.cloud.nacos.config.ext-config[0].refresh=true spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml spring.cloud.nacos.config.ext-config[1].group=dev spring.cloud.nacos.config.ext-config[1].refresh=true
总结:个人而言,觉得nacos的服务注册发现以及配置管理还是挺不错的,自己也在慢慢摸索,继续努力吧!