使用nacos实现注册中心和配置中心

本文介绍了如何在SpringBoot项目中使用SpringCloudAlibabaNacos作为配置中心,包括配置文件的分类、管理策略,如公共配置的提取和模块间的依赖处理,以及配置文件的优先级设定。
摘要由CSDN通过智能技术生成

实现注册中心

在pom文件中导入

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在bootstrap.yml中写下如下配置

spring:
  application:
    name: content-api #服务名
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848 #nacos服务地址
      discovery:
        namespace: dev #命名空间
        group: xuecheng-plus-project 分组名

 实现配置中心

 在pom文件中导入

  <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>

 在bootstrap.yml中写下如下配置

spring:
  application:
    name: content-service
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true

#profiles默认为dev
  profiles:
    active: dev #环境设置

这样就可以在nacos中创建配置文件进行管理了。

搭建Nacos为配置中心,其目的就是通过Nacos去管理项目的所有配置。

先将项目中的配置文件分分类:

1、每个项目特有的配置

是指该配置只在有些项目中需要配置,或者该配置在每个项目中配置的值不同。

比如:spring.application.name每个项目都需要配置但值不一样,以及有些项目需要连接数据库而有些项目不需要,有些项目需要配置消息队列而有些项目不需要。

2、项目所公用的配置

是指在若干项目中配置内容相同的配置。比如:redis的配置,很多项目用的同一套redis服务所以配置也一样。

另外还需要知道nacos如何去定位一个具体的配置文件,即:namespace、group、dataid.

1、通过namespace、group找到具体的环境和具体的项目。

2、通过dataid找到具体的配置文件,dataid有三部分组成

比如:content-service-dev.yaml配置文件  由(content-service)-(dev). (yaml)三部分组成

content-service:第一部分,它是在application.yaml中配置的服务名,即spring.application.name的值。

dev:第二部分,它是环境名,通过spring.profiles.active指定,

Yaml: 第三部分,它是配置文件 的后缀,目前nacos支持properties、yaml等格式类型,本项目选择yaml格式类型。

优化配置

如果项目结构比较复杂,为了方便维护,可以进一步去优化配置。

1.提取公共配置单独作为一个配置文件

在nacos中将一些很多模块都要用的 配置提取出来单独作为一个配置文件

 在本地读取配置时加上shared-configs(共享的配置项)

spring:
  application:
    name: content-api
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true
        extension-configs:
          - data-id: content-service-${spring.profiles.active}.yaml
            group: xuecheng-plus-project
            refresh: true
        shared-configs:
          - data-id: swagger-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
          - data-id: logging-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
  profiles:
    active: dev

2. 如果你的项目中一个模块依赖于另一个模块,且只有其中一个模块在服务中心注册。

例:你的项目将web层和service进行了一个拆分,他们分别作为一个模块,web模块依赖service模块,我们知道web层是不用连数据库的,但是在本地配置时还是要将数据库的配置写上,而且service层的test中也要配置上数据库的信息,这是因为我们程序在运行时前端访问的是web层,这时web层会调用service层,但是分为单独的模块后web层调用service层时配置文件读取的是自己模块中的配置文件,但是我们在做单元测试时service层读取又是本模块的配置文件这样就要同样的配置去配置两次。

解决办法:

将service层的配置文件也交给nacos进行管理:

1.导入配置管理依赖(service不需要进行服务注册)

  <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>

2.在本地配置service层的yaml

spring:
  application:
    name: content-service
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true

#profiles默认为dev
  profiles:
    active: dev

之后在nacos中创建对应的配置文件

 

3.在本地修改web层的配置文件加上拓展配置( extension-configs)

server:
  servlet:
    context-path: /content
  port: 63040
spring:
  application:
    name: content-api
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true
        extension-configs:
          - data-id: content-service-${spring.profiles.active}.yaml
            group: xuecheng-plus-project
            refresh: true
        shared-configs:
          - data-id: swagger-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
          - data-id: logging-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
  profiles:
    active: dev #环境设置

 

 3.配置优先级

SpringBoot读取配置文件 的顺序如下: 

 

引入配置文件的形式有:

1、以项目应用名方式引入

2、以扩展配置文件方式引入

3、以共享配置文件 方式引入

4、本地配置文件

各配置文件 的优先级:项目应用名配置文件 > 扩展配置文件  > 共享配置文件 > 本地配置文件。

有时候我们在测试程序时直接在本地加一个配置进行测试,比如下边的例子:

我们想启动两个内容管理微服务,此时需要在本地指定不同的端口,通过VM Options参数,在IDEA配置启动参数

 

 

通过-D指定参数名和参数值,参数名即在bootstrap.yml中配置的server.port。 

 

启动ContentApplication2,发现端口仍然是63040,这说明本地的配置没有生效。

这时我们想让本地最优先,可以在nacos配置文件 中配置如下即可实现:

YAML
#配置本地优先
spring:
 cloud:
  config:
    override-none: true

再次启动ContentApplication2,端口为63041。

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉普兰德做的到吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值