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/...

相关推荐
caihuayuan51 小时前
全文索引数据库Elasticsearch底层Lucene
java·大数据·vue.js·spring boot·课程设计
冼紫菜1 小时前
Spring 项目无法连接 MySQL:Nacos 配置误区排查与解决
java·spring boot·后端·mysql·docker·springcloud
大G哥2 小时前
用 Go 和 TensorFlow 实现图像验证码识别系统
开发语言·后端·golang·tensorflow·neo4j
一个憨憨coder2 小时前
Spring 如何解决循环依赖问题?
java·后端·spring
代码哈士奇2 小时前
认识中间件-以及两个简单的示例
后端·中间件·typescript·nodejs·nest
李匠20243 小时前
C++GO语言微服务项目之 go语言基础语法
开发语言·c++·后端·golang
Python私教5 小时前
Spring Boot操作MongoDB的完整示例大全
spring boot·后端·mongodb
mit6.8245 小时前
[Es_1] 介绍 | 特点 | 图算法 | Trie | FST
后端·elasticsearch
曾经的三心草6 小时前
RabbitMQ-springboot开发-应用通信
spring boot·rabbitmq·springboot·java-rabbitmq·应用通信
Clf丶忆笙7 小时前
Spring Boot日志配置与管理:从入门到精通
java·spring boot