springboot框架项目实践应用十九(nacos配置中心)

1.引言

在系列第一篇文章:搭建nacos管理控制台中,我们说nacos不单支持用于服务注册发现,还可以用于配置管理,而且用起来相当丝滑!

常用的配置管理组件,你熟悉的都有哪些呢?

  • spring cloud config:spring cloud原生态组件,可谓原汁原味!但是缺少生产环境案例检验,因此一般不建议你在生产环境使用
  • apollo:携程开源的配置中心组件,功能强大易用!业界用的比较多,我们团队也基于apollo二次封装了一个适合我们内部业务的配置中心
  • nacos:阿里开源的配置中心组件,功能强大易用!且经过阿里自身业务的检验,业界用的比较多,你值得拥有!

本文我们探讨的就是nacos作为配置中心组件的使用。

2.基础应用

我们将前面文章用的案例:follow-me-springloud-nacos-consumer,改造使用nacos进行配置管理

2.1.引入依赖

nacos提供了与spring cloud整合的starter

xml 复制代码
<!--nacos config依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.2.nacos管理控制台增加配置

nacos管理配置有一个关键属性:dataId,该dataId的完整格式是这样

bash 复制代码
${prefix}-${spring.profiles.active}.${file-extension}
  • prefix:默认是spring.application.name,可以通过配置项spring.cloud.nacos.config.prefix进行配置
  • spring.profiles.active:当前环境profile,你应该还记得spring.profiles.active。需要注意的是,如果spring.profiles.active属性为空,那么dataId的格式是
bash 复制代码
${prefix}.${file-extension}
  • file-extension:支持的配置文件格式,目前只支持properties与yaml。通过spring.cloud.nacos.config.file-extension进行配置

因此,我们先为应用follow-me-springloud-nacos-consumer增加一个配置文件,它的dataId是

vbnet 复制代码
follow-me-springloud-nacos-consumer.yaml

之所以不配置spring.profiles.active,是因为nacos的namespace本身就是不同环境的隔离,这个特性如果你不记得了,可以看前一篇文章:项目中nacos高级特性实战,在这篇文章中,我有详细的介绍nacos服务领域模型

好了,来增加配置吧!我在dev名称空间中增加

图一

图二

2.3.编写应用配置类

为了方便查看使用效果,我们编写一个配置类,对应follow-me-springcloud-nacos.consumer.yaml中配置内容

yaml 复制代码
consumer:
  appId: c0000001
  appName: myConsumer_DEV

ConsumerNacosConfig:

java 复制代码
/**
 * 配置类
 *
 * @author ThinkPad
 * @version 1.0
 */
@Configuration
@ConfigurationProperties("consumer")
@Data
public class ConsumerNacosConfig {
    
    private String appId;
    private String appName;
}

2.4.增加测试端点

增加一个测试端点,方便测试效果

java 复制代码
@Autowired
private ConsumerNacosConfig consumerNacosConfig;

@RequestMapping("config")
public String testConfig(){
    log.info("ConsumerController---testConfig.当前配置信息:{}", consumerNacosConfig);

    return consumerNacosConfig.toString();
}

2.5.增加启动配置文件

配置中心连接信息,需要在应用启动的时候最先加载,因此需要增加启动配置文件bootstrap.yml,它是在springboot应用启动中,最先加载的配置文件,满足我们的需求

yaml 复制代码
spring:
  cloud:
    nacos:
      config:
        #配置中心地址
        server-addr: 127.0.0.1:8848
        #配置中心名称空间,配置dev环境
        namespace: 1a500714-6fdc-410c-8743-ae30d0edf92e
        # 配置文件格式
        file-extension: yaml

2.6.启动应用

启动应用,访问端点:http://127.0.0.1:8090/consumer/config

3.高级特性

3.1.spring.profiles.active属性

前面我们说,nacos配置管理的关键属性:dataId,它的完整格式是

bash 复制代码
${prefix}-${spring.profiles.active}.${file-extension}

因此它支持spring.profiles.active特性,在项目实践中,一般会这么去设置配置文件

  • follow-me-springloud-nacos-consumer.yaml:配置通用属性
  • follow-me-springloud-nacos-consumer-dev.yaml:配置特定环境属性,比如开发环境
  • follow-me-springloud-nacos-consumer-prod.yaml:配置特定环境属性,比如生产环境

图一

follow-me-springloud-nacos-consumer.yaml

yaml 复制代码
server:
  port: 8090

follow-me-springloud-nacos-consumer-dev.yaml

yaml 复制代码
consumer:
  appId: c0000001
  appName: myConsumer_DEV
#ribbon配置
ribbon:
  eager-load:
    #开启ribbon饥饿加载
    enabled: true
#服务提供者,使用nacos提供的负载均衡策略:同集群优先调用
follow-me-springloud-nacos-provider:
   ribbon:
     NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

follow-me-springloud-nacos-consumer-prod.yaml

yaml 复制代码
consumer:
  appId: c0000001
  appName: myConsumer_PROD
#ribbon配置
ribbon:
  eager-load:
    #开启ribbon饥饿加载
    enabled: true
#服务提供者,使用ribbon默认的负载均衡策略:轮询
follow-me-springloud-nacos-provider:
   ribbon:
     NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule

在bootstrap.yml中增加spring.profiles.active配置,并启动应用测试

yaml 复制代码
spring:
  profiles:
    #当前环境:dev
    active: dev

访问端点:http://127.0.0.1:8090/consumer/config

访问端点:http://127.0.0.1:8090/consumer/test,观察到使用的是NacosRule负载均衡策略,即同集群优先,随机调用

在bootstrap.yml中增加spring.profiles.active配置,并启动应用测试

yaml 复制代码
spring:
  profiles:
    #当前环境:prod
    active: prod

访问端点:http://127.0.0.1:8090/consumer/config

访问端点:http://127.0.0.1:8090/consumer/test,观察到使用的是RoundRobinRule负载均衡策略,即同轮询

3.2.namespace隔离

如果不使用nacos提供的dataId属性,与spring.profiles.active特性实现环境隔离。我们还可以选择通过namespace特性实现环境之间的隔离。

在bootstrap.yml配置文件中,我们其实是指定了namespace属性为dev环境的

yaml 复制代码
spring:
  profiles:
    #当前环境:prod
    active: prod
  cloud:
    nacos:
      config:
        #配置中心地址
        server-addr: 127.0.0.1:8848
        #配置中心名称空间,配置dev环境
        namespace: 1a500714-6fdc-410c-8743-ae30d0edf92e
        # 配置文件格式
        file-extension: yaml

如果我把spring.cloud.nacos.config.namespace改为prod的namespace,你会发现配置不生效了,原因是我们在prod 名称空间环境下没有相应的配置,具体我就不演示了,留给你去实践。

本文源码地址:gitee.com/yanghouhua/...

相关推荐
声声codeGrandMaster31 分钟前
Django之modelform使用
后端·python·django
老李不敲代码3 小时前
榕壹云无人共享系统:基于SpringBoot+MySQL+UniApp的物联网共享解决方案
spring boot·物联网·mysql·微信小程序·uni-app·软件需求
慕容静漪7 小时前
如何本地安装Python Flask并结合内网穿透实现远程开发
开发语言·后端·golang
ErizJ7 小时前
Golang|锁相关
开发语言·后端·golang
烛阴7 小时前
手把手教你搭建 Express 日志系统,告别线上事故!
javascript·后端·express
良许Linux7 小时前
请问做嵌入式开发C语言应该学到什么水平?
后端
Pitayafruit8 小时前
SpringBoot整合Flowable【08】- 前后端如何交互
spring boot·后端·workflow
小丁爱养花8 小时前
驾驭 Linux 云: JavaWeb 项目安全部署
java·linux·运维·服务器·spring boot·后端·spring
uhakadotcom9 小时前
Amazon GameLift 入门指南:六大核心组件详解与实用示例
后端·面试·github