• 【微服务】- 配置中心 - Nacos


    微服务 - 配置中心 - Nacos

    🏆 一个有梦有戏的人 @怒放吧德德
    🔥分享学习心得,欢迎指正,大家一起学习成长!

    今天的学习任务就是学习使用Nacos作为配置中心。
    努力克制自己,拒绝摆烂!
    在这里插入图片描述

    什么是配置中心

    配置中心就是将各个微服务的配置集中管理,就是一种统一管理各种应用配置的基础服务组件,并且能够动态配置服务,动态配置服务。动态配置服务让您能够以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心化管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。
    image
    就像如此,用户发布/修改配置,客户端能够实时监听到改动并且跟着改变。

    Nacos配置模型

    对于Nacos配置管理,通过Namespace、group、Data ID能够定位到一个配置集。Nacos抽象定义了Namespace、Group、Data ID的概念,具体这几个概念代表什么,取决于我们把它们看成什么,这里推荐给大家一种用法,如下图:
    image
    Namespace:代表不同环境,如开发、测试、生产环境。
    Group:代表某项目,如XX项目
    DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件
    获取配置集需要指定:
    1、nacos服务地址,必须指定
    2、namespace,如不指定默认public
    3、group,如不指定默认 DEFAULT_GROUP
    4、dataId,必须指定

    命名空间

    namespace 隔离设计,不同空间互不干扰。
    命名空间(Namespace)是用于隔离多个环境的(如开发、测试、生产),而每个应用在不同环境的同一个配置(如数据库数据源)的值是不一样的。因此,我们应针对企业项目实际研发流程、环境进行规划。如某软件公司拥有开发、测试、生产三套环境,那么我们应该针对这三个环境分别建立三个namespace。
    image
    通过新建命名空间,可以为不同环境设置不同的配置文件,并且不同的命名空间的配置内容是相互隔离的,并不会相互干扰,只是需要在配置的时候选中是那个命名空间,不选择则是默认的public。

    配置管理

    Nacos提供管理所有配置,并且可以通过命名不同来定义许多种不一样的配置。Nacos2.x提供了许多的配置文件类型,基本复合我们的开发使用。
    image
    选择命名空间,新建配置文件,Data ID的命名规则:

    ${prefix}-${spring.profile.active}.${file-extension}
    
    • prefix 默认为所属工程配置spring.application.name 的值,也可以通过配置spring.cloud.nacos.config.prefix来配置。
    • spring.profiles.active=dev 即为当前环境对应的 profile。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
    • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。
      Nacos还支持编辑DIFF能力,帮助用户校验修改内容,降低改错带来的风险。
      通过编辑可以对配置进行编辑,编辑的时候,dateId和Group是不能修改的,因此只能添加新的配置文件
      image

    如果在nacos的配置文件中配置了数据库,就能够将配置 数据保存下来
    image

    实例

    现在使用springcloud demo来演示一下配置中心。

    配置数据持久化

    nacos有自带默认的存储方式,能够保留本地,还可以是通过配置数据库,从而达到数据的持久化。
    首先在nacos/conf/application.properties 可以进行数据库的配置
    将以下配置放在配置文件中

    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://localhost:3307/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=root
    db.password.0=12356
    

    数据库的数据是文件夹里面的nacos-mysql.sql这个文件

    导入依赖坐标

    需要引入nacos配置坐标

    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-config
    
    

    设置相关的配置

    在bootstrap.yml文件中设置相关的配置

    server:
      port: 8000
    spring:
      application:
        name: service-goods
      cloud:
        nacos:
          server-addr: localhost:8848
          discovery:
            ephemeral: false # false为永久实例,true表示临时实例开启,注册为临时实例
          config:
            server-addr: localhost:8848
            file-extension: yml
            group: DEFAULT_GROUP # 默认值
            namespace: bb4fbfd3-db73-45a7-8db0-59e62c2e2dd5 # 没有指定的话就是默认 public
    

    需要配置前缀,在application.yml文件中配置如下

    spring:
      profiles:
        active: dev
    

    编写接口

    通过编写一个接口来测试从配置中心中拉取配置内容。
    @RefreshScope: 能够使之动态配置,只要在配置中心中修改数据,就能够跟着改动。
    @Value: 就是跟springboot获取yml中的信息一样,实际上也是这样子的,只不过是把配置内容放在了nacos服务器上了

    package com.lyd.demo.controller;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.lyd.demo.entity.GoodsDto;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    import java.util.Map;
    /**
     * @author: lyd
     * @description: api
     * @Date: 2022/9/21
     */
    @RefreshScope // 动态更新配置
    @RestController
    @RequestMapping("/api")
    public class GoodsController {
        @Autowired
        private RestTemplate restTemplate;
        @Value("${goods.name:null}")
        private String name;
        @Value("${goods.price:0.0}")
        private Double price;
        @GetMapping("/getValues")
        public String getConfigurationCenterValue() {
            return "商品名:" + name + " ,价格:" + price;
        }
        // ...
    }
    

    运行结果

    image
    今天就分享Nacos的初步使用,总体来说,Nacos在本地单机运行的时候很不稳定,容易出现问题。
    👍创作不易,可能有些语言不是很通畅,如有错误请指正,感谢观看!记得点赞哦!👍

  • 相关阅读:
    MySQL简单命令总结
    ubuntu cutecom串口调试工具使用方法(图形界面)
    M1Mac使用UTM虚拟机最小化安装x86_64架构的Archlinux
    【芯片前端】RTL一键编译/lint检查/verdi打开的快捷处理
    理解Java程序的执行
    C++核心编程--多态篇
    适用于一切模型的决策曲线分析DCA
    RabbitMQ之Fanout(扇形) Exchange解读
    小米软件开发二面和中兴软开一面
    两道相似的三维dp动态规划题
  • 原文地址:https://www.cnblogs.com/lyd-code/p/16724681.html