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

微服务 – 配置中心 – Nacos

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

今天的学习任务就是学习使用Nacos作为配置中心。
努力克制自己,拒绝摆烂!

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

什么是配置中心

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

【微服务】- 配置中心-Nacos
就像如此,用户发布/修改配置,客户端能够实时监听到改动并且跟着改变。

Nacos配置模型

对于Nacos配置管理,通过Namespace、group、Data ID能够定位到一个配置集。Nacos抽象定义了Namespace、Group、Data ID的概念,具体这几个概念代表什么,取决于我们把它们看成什么,这里推荐给大家一种用法,如下图:

【微服务】- 配置中心-Nacos
Namespace:代表不同环境,如开发、测试、生产环境。
Group:代表某项目,如XX项目
DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件
获取配置集需要指定:
1、nacos服务地址,必须指定
2、namespace,如不指定默认public
3、group,如不指定默认 DEFAULT_GROUP
4、dataId,必须指定

命名空间

namespace 隔离设计,不同空间互不干扰。
命名空间(Namespace)是用于隔离多个环境的(如开发、测试、生产),而每个应用在不同环境的同一个配置(如数据库数据源)的值是不一样的。因此,我们应针对企业项目实际研发流程、环境进行规划。如某软件公司拥有开发、测试、生产三套环境,那么我们应该针对这三个环境分别建立三个namespace。

【微服务】- 配置中心-Nacos
通过新建命名空间,可以为不同环境设置不同的配置文件,并且不同的命名空间的配置内容是相互隔离的,并不会相互干扰,只是需要在配置的时候选中是那个命名空间,不选择则是默认的public。

配置管理

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

【微服务】- 配置中心-Nacos
选择命名空间,新建配置文件,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是不能修改的,因此只能添加新的配置文件
    【微服务】- 配置中心-Nacos

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

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

实例

现在使用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;
    }
    // ...

}

运行结果

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

Original: https://www.cnblogs.com/lyd-code/p/16724681.html
Author: 怒放吧德德
Title: 【微服务】- 配置中心-Nacos

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574118/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python 中 map() zip() list() 函数的介绍

    map() map(function , iterable, ….) : 依次将函数function作用在可迭代的list上,并返回对应的函数返回值,组成新的list(…

    Linux 2023年6月7日
    0116
  • Linux 配置Git

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 一、用git –version命令检查是否已经安装 二、下载git源码并解压 wget https:/…

    Linux 2023年6月14日
    0102
  • RPA 微信财务报销机器人 竹间智能

    bash;gutter:true; 1、首先通过微信对话机器人收集报销信息及内容 2、上传发票并进行OCR识别 3、收集相关的出差信息,支持对话中修改内容 4、完成信息收集后,后台…

    Linux 2023年6月7日
    0112
  • 操作系统实战45讲- 02 几行汇编几行C:实现一个最简单的内核

    本节源代码位置https://gitee.com/lmos/cosmos/tree/master/lesson02/HelloOS Hello OS 之前,我们先要搞清楚 Hell…

    Linux 2023年6月7日
    0105
  • 不自由的自由职业

    大家好。我叫梁旭,以前是农民,现在是自由职业者。 [En] Hello, everyone. I’m Liangxu, a former farmer, and now…

    Linux 2023年5月27日
    0133
  • Golang 实现 Redis(11): RDB 文件格式

    RDB 文件使用二进制方式存储 Redis 内存中的数据,具有体积小、加载快的优点。本文主要介绍 RDB 文件的结构和编码方式,并借此探讨二进制编解码和文件处理方式,希望对您有所帮…

    Linux 2023年5月28日
    0106
  • 3.21 Linux PATH环境变量及作用(初学者必读)

    在讲解 PATH 环境变量之前,首先介绍一下 which 命令,它用于查找某个命令所在的绝对路径。例如: [root@localhost ~]# which rm /bin/rm …

    Linux 2023年6月7日
    092
  • Redis多线程原理详解

    从上图中可以看出只有以下3个地方用的是多线程,其他地方都是单线程: 1:接收请求参数 2:解析请求参数 3:请求响应,即将结果返回给client 很明显以上3点各个请求都是互相独立…

    Linux 2023年5月28日
    0101
  • 前端开发:如何正确地跨端

    导读:面对多种多样的跨端诉求,有哪些跨端方案?跨端的本质是什么?作为业务技术开发者,应该怎么做?本文分享阿里巴巴ICBU技术部在跨端开发上的一些思考,介绍了当前主流的跨端方案,以及…

    Linux 2023年6月8日
    080
  • ansible用authorized_key模块批量推送密钥到受控主机实现免密登录

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0101
  • ASP已老,尚能饭否?

    我对ASP的感情,跟大海一样深。我用它实现了第一个动态网页,也用它做了毕业设计,毕业设计的名字是《毕业设计管理系统》(是不是有点绕)。在 PHP 和 ASP.NET、Java 高歌…

    Linux 2023年6月6日
    0116
  • 微服务与领域驱动设计,架构实践总结

    怎样的架构才能配得上造到飞起的变化? 一、软件复杂性 1、复杂原因 如果软件系统存在持续的迭代周期,那么其中业务、技术、架构的复杂性都会直线拉升,其相应的开发难度也会提高,可以用一…

    Linux 2023年6月14日
    069
  • Linux 磁盘挂载

    具体操作是: 1.先对磁盘进行格式化; 挂载磁盘到需要的挂载点; 3.添加分区启动表 1、首先查看系统中磁盘信息 命令为:fdisk -l 2、格式化要挂载的磁盘 格式化命令为:m…

    Linux 2023年6月7日
    0100
  • 个人的游戏紧张程度排行

    玩游戏是为了放松,适当的紧张刺激能让人兴奋愉悦,但如果过度紧张就会适得其反,不仅达不到放松和休息的效果,甚至还可能会损害健康。所以本人将自己常玩的网游和游戏总结了一下,按从低到高的…

    Linux 2023年6月6日
    0112
  • python中的反射

    python反射简介 所谓反射是指通过字符串的方式获取对象,然后执行对象的属性或方法。在python中一切皆对象,因此我们可以对一切事物进行发射。 关于反射python为我们提供了…

    Linux 2023年6月7日
    0108
  • MSSQL中UPDATE与 INNER JOIN联用的语法结构

    | 0.16分钟 | 267.2字符 | 1、引言&背景 2、解决方案 3、声明与参考资料 | SCscHero | 2022/4/30 PM9:36 | 系列 | 已完成…

    Linux 2023年6月14日
    089
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球