微服务2-nacos 配置中心

2023-11-02

1什么是配置中心

在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此,分散中还包含着冗余,如下图:
在这里插入图片描述

2为什么要使用配置中心

配置中心将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置。

Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

在这里插入图片描述

3 下载部署

见nacos 注册中心篇

4 实战

4.1 引入 pom


        <!-- bootstrap 启动器,让 bootstrap.yaml 生效 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        
 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

4.2 bootstrap.yml 配置

配置中心的配置只能放在bootstrap.yml 中

spring:
  application:
    # 应用名称
    name: mycloud-nacos

  profiles:
    # 环境配置
    active: pro

  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: xxxx:8848
      config:
        # 配置中心地址 默认按照application-name去匹配配置文件
        server-addr: xxxx:8848
        # 配置文件格式
        file-extension: yaml

配置中心地址 默认按照application-name去匹配配置文件,默认读properties后缀。

4.3 nacos 平台新增配置文件

namespace:名称空间用于隔离不同租户的配置。组和数据 id 可以在不同的名称空间中相同。名称空间的典型场景是不同项目组的配置隔离,例如,team1/team2/team3之间的隔离。

Group:默认情况下,当没有定义{ spring.cloud.nacos.config.group }配置时,使用 DEFAULT _ group。如果您需要定义自己的组,可以在以下属性中定义它:

spring.cloud.nacos.config.group=DEVELOP_GROUP

这个配置必须在 bootstrap.properties 文件中,Group 的值必须与 spring.cloud.nacos.config.Group 的值相同,常用来作为不同的项目

Data ID: 默认为 a p p l i c a t i o n . n a m e − {application.name}- application.name{spring.profiles.active}.properties
其中spring.profiles.active 是根据服务application配置文件制定的环境自动适配的
Data ID 默认采用properties后缀我们可以通过 spring.cloud.nacos.config.file-extension: yaml 来让它读取yaml 后缀,可作为区分多模块项目配置文件,以及多环境配置文件

在这里插入图片描述

在这里插入图片描述

3)
配置mycloud-nacos.yaml
在这里插入图片描述

配置mycloud-nacos-dev.yaml
在这里插入图片描述

配置 mycloud-nacos-pro.yaml
在这里插入图片描述

4.4 读取nacos 多环境配置

1) 在nacos 上新增配置文件

@RestController
@RequestMapping("/nacos")
@RefreshScope
@Slf4j
public class TestController {

    @Value("${age}")
    private Integer age;

    @Value("${id}")
    private Integer id;


    @RequestMapping("/testConfig")
    public void testConfig(){
        log.info("-------age:{}-----",age);
        log.info("-------id:{}-----",id);
        log.info("-------name:{}", SpringUtil.getEnvironmentProperty("name"));
    }
}



2) 当  spring.profiles.active: pro 时
![在这里插入图片描述](https://img-blog.csdnimg.cn/e08976c740d44c15beb3ec8d2ca27a41.png)

**可见当指定环境时 mycloud-nacos-pro.yaml
 ,mycloud-nacos.yaml 配置都会被读取且前者中的相同配置会覆盖后者,完全符合springboot中多环境配置文件规则。**


3) 当  spring.profiles.active: dev 时

age 变成了 880 说明nacos的配置会跟着spring.profiles.active 变化。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a1964dafc36545c2b97a100362288deb.png)


**3) 当 采用spring.profiles.include:druid,dev 时**

dataId 为 applicationName-dev.yaml, applicationName-druid.yaml 都会被加载




### 4.5读取 nacos 共享配置

1)bootstrap.yaml:

```java
server:
  port: 7001

# Spring
spring:
  application:
    # 应用名称
    name: mycloud-nacos

  profiles:
    # 环境配置
    active: pro

  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: xxxx:8848
      config:
        # 配置中心地址 默认按照application-name去匹配配置文件
        server-addr: xxxx:8848
        # 配置文件格式
        file-extension: yaml
#        共享配置
        shared-configs[0]:
          data-id: common.${spring.cloud.nacos.config.file-extension:yaml}
		  refresh: true #不加共享配置不会生效
  1. nacos上新增配置文件 common-dev.yaml
    在这里插入图片描述

3)设置spring.profiles.active: dev

4)结果

address 已经能够读到,但是我们发现id 并不是common-dev.yaml 中设置的8600 而是mycloud-nacos.yaml 中设置的 1 ,这说明共享配置的优先级比较低。
在这里插入图片描述

4.5 配置自动刷新

@RefreshScope 是nacos 开启配置自动刷新的注解,开启后nacos中配置跟新,服务会拉取最新配置进行更新。

常用搭配
1.@RefreshScope + @ConfigurationProperties()
2.@RefreshScope + @value

测试在nacos2.0版本 @ConfigurationProperties() 不配置@RefreshScope 也可自动刷新,@value必须配置@RefreshScope才可自动刷新。

@Configuration
@ConfigurationProperties(prefix = "auth")
@Data
@Slf4j
public class AuthConfig {

    private String address;

    @PostConstruct
    public void init(){
        log.info("----------auth address:{}",address);
    }
}
    @Value("${testVal}")
    private int testVal;
    @Resource
    private AuthConfig authConfig;
    @GetMapping("/sendmsg")
    public void test(){
        log.info("-----auth authConfig:{}",authConfig);
        log.info("----- testVal:{}",testVal);

    }

改变nacos 配置 authConfig 同步改变,testVal 值没改变,而且发现AuthConfig 中 @PostConstruct 修饰的init方法被调用了,说明nacos上配置刷新时,配置类会重新初始化。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微服务2-nacos 配置中心 的相关文章

随机推荐

  • Kubernetes之配置与自定义DNS服务

    本文解释如何为kubernetes集群配置及自定义DNS服务 从kubernetes1 11版本开始 coreDNS插件被包含在GA发行版中 并且被kubeadm默认安装 详情 Configuring CoreDNS and Using C
  • 深度学习中的Epoch,Batchsize,Iterations深刻理解

    嵌牛导读 Epoch Batchsize Iterations 这三个都是深度学习训练模型时经常遇到的概念 你一定有过这样的时刻 面对这几个词傻傻分不清楚 这三个概念究竟是什么 它们又有什么区别 嵌牛鼻子 深度学习 梯度下降 Epoch B
  • IDEA 自动补全代码快捷键设置

    IDEA 自动补全代码快捷键设置 个人喜好 一 自动补全 快速生成方法返回值 gt 原始快捷键 ctrl alt v gt alt enter file gt settings gt Keymap gt Main Menu gt Refac
  • 基于Selenium+Python的web自动化测试框架(附框架源码+项目实战)

    目录 一 什么是Selenium 二 自动化测试框架 三 自动化框架的设计和实现 四 需要改进的模块 五 总结 总结感谢每一个认真阅读我文章的人 重点 配套学习资料和视频教学 一 什么是Selenium Selenium是一个基于浏览器的自
  • Android接入三方登录——QQ

    facebook错误1 feature unavailable facebook login is currently unavailable for this app since we are updating additional de
  • 记 ReactiveWebServerFactory bean defined in the context. 导致的异常

    异常内容 APPLICATION FAILED TO START Description Web application could not be started as there was no org springframework bo
  • chatgpt赋能python:Python多行注释

    Python 多行注释 在 Python 中 我们经常需要写注释来解释代码或者用于调试 Python 的注释分为单行注释和多行注释 本文主要介绍 Python 中如何多行注释 单行注释 在 Python 中 单行注释以符号 开头 可以写在代
  • Windows的密码生成算法——NTLM算法破解

    文章目录 方法一 Python代码暴力破解 方法二 hashcat工具破解 NTLM CDABE1D16CE42A13B8A9982888F3E3BE hint 密码长度不超过5 数字和符号组成 Windows下NTLM Hash生成原理
  • mysql5.7 免安装版配置

    文章目录 my ini 安装为服务 启动服务命令 移除服务命令 修改 root 账号的密码 初始化数据 my ini 复制 my default ini 或者新建 client port 3306 default character set
  • <mirrorOf>标签用于指定哪些仓库或仓库组需要使用该镜像源

    在Maven配置镜像源时 确实会使用到mirrorOf
  • 使用内核API函数找到I2C和串口控制器发送数据

    我们一般操作I2C或者串口都是编写应用程序调用内核硬件提供的设备节点操作这些硬件的 但是在某个项目中 需要在shutdown的时候往i2c和tty发送数据 发送数据给外置的mcu mcu几秒内就会给cpu断电 所以 这个动作无法在应用层中完
  • 靠谱的车 算法

    靠谱的车 程序员小明打了一辆出租车去上班 出于职业敏感 他注意到这辆出租车的计费表有点问题 总是偏大 出租车司机解释说他不喜欢数字4 所以改装了计费表 任何数字位置遇到数字4就直接跳过 其余功能都正常 比如 23再多一块钱就变为25 39再
  • Amazon S3 REST方式获取Object

    Amazon S3 用REST方式获取文件 具体参见API http docs aws amazon com AmazonS3 latest API RESTObjectGET html 利用C 构建下面的请求 GET ObjectName
  • MSCAN:Learning Deep Context-aware Features over Body and Latent Parts for Person ReID阅读笔记

    Learning Deep Context aware Features over Body and Latent Parts for Person Re identification 作者 DangWei Li等人 CVPR 2017 1
  • DOS常用命令(从入门到精通)

    DOS命令学习 一 DOS使用常识 DOS的概况 DOS Disk Operating System 是一个使用得十分广泛的磁盘操作系统 就连眼下流行的Windows9x ME系统都是以它为基础 常见的DOS有两种 IBM公司的PC DOS
  • 朴素贝叶斯理论推导与三种常见模型

    朴素贝叶斯 Naive Bayes 是一种简单的分类算法 它的经典应用案例为人所熟知 文本分类 如垃圾邮件过滤 很多教材都从这些案例出发 本文就不重复这些内容了 而把重点放在理论推导 其实很浅显 别被 理论 吓到 三种常用模型及其编码实现
  • C++ 和 OpenCV 实现卷积神经网络并加载 Keras 训练好的参数进行预测

    C 和 OpenCV 实现卷积神经网络并加载 Keras 训练好的参数进行预测 一 背景 二 Keras 定义神经网络结构 channels first 与 channels last channels first 与 channels l
  • Sourcetree 打开闪退怎么处理

    只需要把箭头指向的SourceTree exe Url 3vynpq3lkfkc3vf35ldq2wva2cs3o2zs文件删除 如果是多个一并删除 只留一个SourceTree文件夹即可
  • WebService 与 SOAP、WSDL、UDDI

    什么是WebService Web Services 是一种基于组件的软件平台 是面向服务的Internet 应用 Web Services 是应用于Internet 的 而不是限于局域网或试验环境 这要求提出的Web Services 框
  • 微服务2-nacos 配置中心

    1什么是配置中心 在微服务架构中 当系统从一个单体应用 被拆分成分布式系统上一个个服务节点后 配置文件也必须跟着迁移 分割 这样配置就分散了 不仅如此 分散中还包含着冗余 如下图 2为什么要使用配置中心 配置中心将配置从各应用中剥离出来 对