nacos的注册服务发现及配置管理

  之前在学习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的服务注册发现以及配置管理还是挺不错的,自己也在慢慢摸索,继续努力吧!

原文地址:https://www.cnblogs.com/wei-cy/p/13466642.html