源码地址:https://gitee.com/fighter3/eshop-project.git

持续更新中……

在我们前面介绍Nacos的时候,说到,Nacos除了可以作为注册中心,还可以作为配置中心,而在SpringCloud Netfilx的体系下,这个工作是由Spring Cloud Config完成的。

至于为什么需要配置中心?大家想一下,在微服务开发体系下,整个系统可能被拆分成几十、上百个服务,在生产的时候,每个服务可能部署几十上百个节点,而且通常是又多个环境,如开发、测试、预发布、成产等等,如果没有一个集中式的配置中心,一个个去管理,那是一个多么的事情。

好了,接下来我们开始愉快地学习Nacos作为分布式配置中心吧!

1、Nacos配置基本概念

在正式开始实战之前,我们先了解一下Nacos配置的一些基本概念。

上图我们可以看到Nacos作为配置中心的几个主要概念:

  • 命名空间

区分环境,比如:dev、test、prod 等等。

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

  • 配置分组

多个配置文件放在一起,形成组,一般用于区分项目。例如,某学校多应用之间的区分,教师应用 TEACHER_GROUP,学生应用 STUDENT_GROUP。

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

  • 配置集

多个键值对,一般指一个配置文件。

一组相关或者不相关的配置项的集合称为配置集(多个键值对/一个配置文件)。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

  • 配置集ID

给这个配置文件起一个全局唯一的 ID。

Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

  • 配置项

一个键值对 <Key = Value>

一个具体的可配置的参数与其值域(一个键值对),通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。

给大家看一个Nacos的配置示例,这些概念相信你就都明白。

2、引入Nacos配置中心

我们以eshop-user为例演示我们的配置中心。

2.1、引入nacos-config依赖

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

2.2、配置文件

和SpringCloud Conig类似,我们必需要在 bootstrap.yml配置文件中进行配置,在application.yml中无效,bootstrap.yml优先级高于application.yml

spring:
application:
name: user-service # 应用名称
profiles:
active: dev # 当前环境对应的 profile
cloud:
nacos:
config:
enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可
server-addr: 127.0.0.1:8848 # Nacos Server 地址
group: DEFAULT_GROUP # 组,默认为 DEFAULT_GROUP
file-extension: yaml # 配置内容的数据格式,默认为 properties

说明:之所以需要配置 spring.application.name,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

  在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profile.active}.${file-extension}

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profile.active 即为当前环境对应的 profile。注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式将变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型,默认为 properties

2.3、Nacos Server创建配置

我们在Nacos Server的配置列表中新建一个配置。

Data Iduser-service.yaml,组使用默认组,并添加 yaml 格式的配置信息。

project:
name: e-shop-userservice
author: fighter3

2.4、控制层

使用 Spring 的 @Value 注解来获取配置信息,${} 中对应 Nacos 配置中心配置内容的 key,:后跟默认值。

并且通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新。

/**
* @Author: 三分恶
* @Date: 2021/5/30
* @Description: Nacos配置项获取
**/ @RefreshScope
@RestController
@RequestMapping("/shop-user")
@Api(value = "配置信息接口", tags = "配置信息接口")
public class NacosConfigController {
@Value("${project.name:}")
private String projectName; @Value("${project.author:}")
private String projectAuthor; @GetMapping("/config")
@ApiOperation(value = "获取Nacos配置项")
public Map<String, Object> getConfig() {
Map<String, Object> configMap = new HashMap();
configMap.put("projectName", projectName);
configMap.put("projectAuthor", projectAuthor);
return configMap;
} }

2.5、测试

启动user-service服务。

访问knife4j接口地址:http://localhost:8080/doc.html ,调用获取Nacos配置项接口:

接下来,我们修改一下配置项,并发布:

可以看到控制台打印输出:

再次访问获取配置接口:

OK,到这我们已经成功地读取了Nacos配置中心的配置,接下来,我们尝试将服务的配置,例如数据源来进行统一的集中配置。

3、集中配置

好,我们开始进行Nacos集中配置的实战:

3.1、新建命名空间

我们之前用的是默认的命名空间,接下来我们创建一个新的命名空间,用于我们开发环境的配置。我们给它命名为dev_space:

这里使用了命名空间来隔离配置,如果我们想要一个测试环境的配置,如法炮制,建一个新的空间就行了。

3.2、创建数据源配置

接下来我们在dev_space下创建一个新的配置user-service-dev.yaml

project:
name: e-shop-userservice
author: fighter3
# 数据源配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/shop_user?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=GMT%2B8
username: root
password: root

3.3、修改本地配置

我们在bootstrap.yml中指定命名空间,完整bootstrap.yml如下:

spring:
application:
name: user-service # 应用名称
profiles:
active: dev # 当前环境对应的 profile
cloud:
nacos:
config:
enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可
server-addr: 127.0.0.1:8848 # Nacos Server 地址
group: DEFAULT_GROUP # 组,默认为 DEFAULT_GROUP
file-extension: yaml # 配置内容的数据格式,默认为 properties
namespace: dev_space # 指定命名空间,默认为public

修改application.yml,注释掉数据源相关配置:

3.4、测试

启动用户服务,服务正常启动以后,我们分别调试获取用户信息接口和获取配置接口。

OK,获取到了预期的结果。

好了,Nacos作为分布式配置中心的实战到此结束了,了解更多可以直接查看官方文档!

系列文章持续更新中!

"简单的事情重复做,重复的事情认真做,认真的事情有创造性地做!"——

我是三分恶,可以叫我老三/三分/三哥/三子,一个能文能武的全栈开发,咱们下期见!


参考:

【1】:小专栏 《SpringCloudAlibaba微服务实战》

【2】:nacos 实战(史上最全)

【3】:4. Spring Cloud Alibaba Nacos Config

【4】:Spring Cloud 系列之 Alibaba Nacos 配置中心

SpringCloud Alibaba实战(10:分布式配置中心)的更多相关文章

  1. 白话SpringCloud | 第八章:分布式配置中心的服务化及动态刷新

    前言 上一章节,简单介绍了分布式配置中心Spring Cloud Config的使用.同时,我们也遗漏了一些问题,比如如何配置实时生效,当服务端地址变更或者集群部署时,如何指定服务端地址?回想,在服务 ...

  2. Springcloud 2.x 版本 分布式配置中心

    一.什么是分布式配置中心? 就是为微服务架构中的微服务提供集中化的外部配置支持,配置中心为各个微服务应用的所有环境提供了中心化的外部配置(可能比较难理解,想知道是什么意思就要知道为什么这么配置:这么配 ...

  3. SpringCloud(6)分布式配置中心Spring Cloud Config

    1.Spring Cloud Config 简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组 ...

  4. SpringCloud学习之Config分布式配置中心(八)

    统一配置中心概述 如果微服务架构中没有使用统一配置中心时,所存在的问题: 配置文件分散在各个项目里,不方便维护 配置内容安全与权限,实际开发中,开发人员是不知道线上环境的配置的 更新配置后,项目需要重 ...

  5. SpringCloud使用Consul作为分布式配置中心

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_36027670/article/de ...

  6. SpringCloud 进阶之分布式配置中心(SpringCloud Config)

    1. SpringCloud Config SpringCLoud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用 的所有环境提供了一个中心化的外部配置; ...

  7. SpringCloud学习笔记(九):SpringCloud Config 分布式配置中心

    概述 分布式系统面临的-配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个服务都需要必要的配置信息才能运行,所以一套集中式的.动 ...

  8. SpringCloud与微服务Ⅹ --- SpringCloud Config分布式配置中心

    一.SpringCloud Config是什么 分布式系统面临的问题 --- 配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个 ...

  9. SpringCloud全家桶学习之分布式配置中心----Config(七)

    一.概述 (1)背景 微服务意味着将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中出现大量的服务.由于每个服务都需要配置必要的配置信息才能运行,所以一套集中式的.动态的配置管理 ...

随机推荐

  1. foreign key 多对一 多对对 一对一

    使用foreign key 要清除先有哪张表再有哪张表,后表对应前表 例如现有部门再有员工,所以员工对应部门 现有作者后有书,所以书对应作者 现有潜在顾客后有顾客,所以顾客对应潜在顾客 多对多建立3张 ...

  2. 2Spring对象创建小结

    Spring的对象创建 Spring学习笔记 周芋杉2021/5/15 原理:工厂设计模式,通过反射创建对象. Spring工厂分类 非web环境:ClassPathXmlApplicationCon ...

  3. 百万级数据mysql查询优化

    一.limit越往后越慢的原因 当我们使用limit来对数据进行分页操作的时,会发现:查看前几页的时候,发现速度非常快,比如 limit 200,25,瞬间就出来了.但是越往后,速度就越慢,特别是百万 ...

  4. Envoy:经过envoy代理后获取客户端真实IP

    在envoy作为前端代理时,用户ip的获取很重要,一般获取ip的方式.都是通过Header中的 X-Forward-For. X-Real-IP或 Remote addr 等属性获取,但是如果确保En ...

  5. [笔记] 《c++ primer》书店程序 Chapter7

    Sales_data.h 1 #ifndef SALES_DATA_H 2 #define SALES_DATA_H 3 4 #include "Version_test.h" 5 ...

  6. 《SystemVerilog验证-测试平台编写指南》学习 - 第3章 过程语句和子程序

    <SystemVerilog验证-测试平台编写指南>学习 - 第3章 过程语句和子程序 3.1 过程语句 3.2 任务.函数以及void函数 3.3 任务和函数概述 3.4 子程序参数 3 ...

  7. mysql 配置文件概述

    mysql 配置文件概述 mysql 配置文件 mysql 的配置文件为 /etc/my.cnf 配置文件查找次序:若在多个配置文件中均有设定,则最后找到的最终生效 /etc/my.cnf --> ...

  8. Python 递归函数详解

    递归函数的概念: 直接或间接的调用自身的函数,称为递归函数. 每调用一次自身,相当于复制一份该函数,只不过参数有变化,参数的变化,就是重要的结束条件 下面是一个递归函数的实例: #coding=utf ...

  9. Java--反射机制——反射 API(Day_04)

    生活中迷茫感的产生,往往源之于坚持一件事放弃的那一刻,因为从那一刻起,你开始变得无聊,变得没有方向感. 运行环境 JDK8 + IntelliJ IDEA 2018.3  本文中使用的jar包链接 h ...

  10. Linux(CentOS 7) 安全加固之非业务端口服务关闭 postfix port 25

    目录 关闭TCP 25 端口对应的服务 1. 确认对应端口的进程 2. 查找与关闭对应服务 3. 确认结果,端口已关闭 关闭TCP 25 端口对应的服务 [0 root@Qvps /root] #ca ...