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

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 配置中心就是将各个微服务的配置集中管理,就是一种统一管理各种应用配置的基础服务组件,并且能够动态配置服务,动态配置服务,动态配置服务让您能够以中心化、外部化和动态化的方式管理所有环境的配置。

微服务 - 配置中心 - Nacos

😄生命不息,写作不止
🔥 继续踏上学习之路,学之分享笔记
🌝分享学习心得,欢迎指正,大家一起学习成长!

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

什么是配置中心

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

就像如此,用户发布/修改配置,客户端能够实时监听到改动并且跟着改变。

Nacos配置模型

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

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

命名空间

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

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

配置管理

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

选择命名空间,新建配置文件,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.png

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

实例

现在使用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配置坐标

<!--配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

设置相关的配置

在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.png

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

相关文章
|
1月前
|
算法 安全 Java
微服务(四)-config配置中心的配置加解密
微服务(四)-config配置中心的配置加解密
|
1月前
|
消息中间件 监控 开发工具
微服务(三)-实现自动刷新配置(不重启项目情况下)
微服务(三)-实现自动刷新配置(不重启项目情况下)
|
2月前
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
192 0
|
3天前
|
Java Nacos 微服务
微服务中间件之Nacos
Nacos是阿里巴巴开源的动态服务发现、配置管理和服务管理平台,支持服务注册与发现、配置管理及服务健康监测。采用Spring Cloud、Spring Boot、Raft算法等技术,适用于微服务架构和云原生应用,提供简单易用的安装部署方式和丰富的应用场景。
17 2
|
1月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
2月前
|
安全 Nacos 数据安全/隐私保护
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
本文详细介绍了如何在微服务环境下从 Nacos 1.3.0 升级到 2.3.0,并确保 Seata 各版本的兼容性。作者小米分享了升级过程中的关键步骤,包括备份配置、更新鉴权信息及验证测试等,并解答了常见问题。通过这些步骤,可以帮助读者顺利完成升级并提高系统的安全性与一致性。
96 8
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
|
13天前
|
负载均衡 算法 Nacos
SpringCloud 微服务nacos和eureka
SpringCloud 微服务nacos和eureka
32 0
|
2月前
|
Cloud Native Java Nacos
微服务注册中心-Nacos概述
该博客文章提供了对Nacos的全面概述,包括其基本介绍、与Spring Cloud集成的优势、主要功能以及如何在Spring Cloud Alibaba项目中作为服务注册中心使用Nacos。文章解释了Nacos是一个动态服务发现、配置管理和服务管理平台,支持服务发现、健康监测、动态配置、DNS服务和元数据管理。还介绍了如何下载和启动Nacos服务器,以及如何将微服务注册到Nacos中,包括修改pom.xml文件引入依赖、配置application.properties文件和使用@EnableDiscoveryClient注解开启服务注册发现功能。
微服务注册中心-Nacos概述
|
2月前
|
存储 供应链 Nacos
Nacos Stream 引领微服务异步消息潮流,为数字化转型保驾护航,你跟上了吗?
【8月更文挑战第29天】在微服务架构中,异步消息处理框架至关重要。Nacos Stream 通过可靠的消息传递机制、优秀的扩展性及灵活的消息过滤与路由功能,在电商系统等场景下展现了巨大价值。其简化了开发过程,支持高并发消息处理,确保了微服务系统的稳定运行与平滑扩展,为复杂系统的构建提供了强有力的消息通信保障。
30 0
|
2月前
|
网络协议 微服务
【Azure 微服务】基于已经存在的虚拟网络(VNET)及子网创建新的Service Fabric并且为所有节点配置自定义DNS服务
【Azure 微服务】基于已经存在的虚拟网络(VNET)及子网创建新的Service Fabric并且为所有节点配置自定义DNS服务