首页 > 其他分享 >SpringCloud Alibaba 06 (配置中心 Nacos Config)

SpringCloud Alibaba 06 (配置中心 Nacos Config)

时间:2024-10-27 15:50:16浏览次数:7  
标签:06 配置文件 SpringCloud 配置 环境 Nacos nacos yaml 服务

在这里插入图片描述

在这里插入图片描述

目录

  • 了解微服务常用的概念
  • 了解项目架构演变
  • 掌握微服务环境搭建
  • 掌握微服务治理组件-Nacos Discovery
  • 掌握微服务负载均衡调度组件-Ribbon
  • 掌握微服务远程调度组件-Feign
  • 掌握微服务流控容错组件-Sentinel
  • 掌握微服务网关组件-Gateway
  • 掌握微服务链路追踪组件-Sleuth&Zipkin
  • 掌握微服务配置中心-Nacos Config
  • 开口表述上面所有组件概念、定位、原理与运用(每个10分钟)

第九章 配置中心 Nacos Config

9.1 服务配置中心介绍

首先我们来看一下,微服务架构下关于配置文件的一些问题:

  1. 配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散

在各个微服务中,不好统一配置和管理。

  1. 配置文件无法区分环境。微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环

境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动

维护,这比较困难。

  1. 配置文件无法实时更新。我们必须要先打开源码修改了配置文件之后,还必须重新启动微服务才能使配置生效,这对一

个正在运行的项目来说是非常不友好的。

4.配置内容安全与权限:配置和源码在一起通常是不安全的,比如数据库连接信息敏感的内容,我不想让开发人员或者其他人看到,开发环境看了还无所谓,尤其是测试环境和生产环境的配置一般是不暴露的。

基于上面这些问题,我们就需要配置中心的加入来解决这些问题。

配置中心的思路是

首先把项目中各种配置全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。

当各个服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。

当配置中心中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动

态更新。

当加入了服务配置中心之后,我们的系统架构图会变成下面这样:

在这里插入图片描述

9.2 常见的服务配置中心

市面上开源的配置中心有很多,BAT每家都出过,360的QConf、淘宝的diamond、百度的disconf都是解决这类问题。

  • Apollo

Apollo是由携程开源的分布式配置中心。特点有很多,比如:配置更新之后可以实时生效,支持灰

度发布功能,并且能对所有的配置进行版本管理、操作审计等功能,提供开放平台API。并且资料

也写的很详细。

  • Disconf

Disconf是由百度开源的分布式配置中心。它是基于Zookeeper来实现配置变更后实时通知和生效

的。

  • SpringCloud Config

这是Spring Cloud中带的配置中心组件。它和Spring是无缝集成,使用起来非常方便,并且它的配

置存储支持Git。不过它没有可视化的操作界面,配置的生效也不是实时的,需要重启或去刷新。

  • Nacos

这是SpingCloud alibaba技术栈中的一个组件,前面我们已经使用它做过服务注册中心。其实它也

集成了服务配置的功能,我们可以直接使用它作为服务配置中心。

9.3 Nacos Config入门

使用nacos作为配置中心,其实就是将nacos当做一个服务端,将各个微服务看成是客户端,我们将各个微服务的配置文件统一存放在nacos上,然后各个微服务从nacos上拉取配置即可。接下来我们以商品微服务为例,学习nacos config的使用。

  1. 搭建nacos环境【使用现有的nacos环境即可】

  2. 在商品微服务中引入nacos的依赖

    <dependency>
    	<groupId>com.alibaba.cloud</groupId>
    	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> 
    </dependency>
    
  3. 在微服务中添加nacos config的配置

    注意:不能使用原来的application.yml作为配置文件,而是新建一个bootstrap.yml作为配置文件

    配置文件优先级(由高到低):
    bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml
    
    spring:
      application:
        name: product-service
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848 #nacos中心地址
            file-extension: yaml # 配置文件格式
      profiles: 
      	active: dev # 环境标识
    
  4. 在nacos中添加配置,然后把商品微服务application.yml配置复制到配置内容中.

    在这里插入图片描述

    在这里插入图片描述

  5. 注释本地的application.yam中的内容, 启动程序进行测试

  6. 如果依旧可以成功访问程序,说明我们nacos的配置中心功能已经实现

​ a.观察 我们的 商品服务发现可以正常启动,端口号是 8081 !

​ b.测试访问,http://localhost:8081/getproductid/1 发现商品数据正常返回!

操作原理:

观察启动后打印的日志,大体能看出操作原理

1>项目启动,先加载bootstrap.yml解析里面配置,得到3个核心信息

  • 服务名:product-service
  • nacos配置中心地址:127.0.0.1:8848
  • 激活环境:dev

2>访nacos配置中心找项目的配置文件

没有指定具体分组默认:DEFAULT_GROUP

组 + 服务名 + 激活换—>DEFAULT_GROUP–product-service-dev.yaml 完全可以找到配置文件

在这里插入图片描述

9.4 配置动态刷新

所谓的动态刷新:项目运行中,手动改了nacos中的配置,项目在不停机的情况下也可以读到最新的数据。

操作步骤:

1>在nacos中的product-service-dev.yaml配置项中添加下面配置:

appConfig:
  name: hello dafei

2>在商品微服务中新增NacosConfigControlller.java

package com.gec.shop.product.controller;
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.RestController;

@RestController
@RefreshScope
public class NacosConfigController {
    @Value("${appconfig.name}")
    public String appConfigName;

    @GetMapping("/appconfigname")
    public String appconfigname(){
        return "从nacos上动态获取到数据是:"+appConfigName+"---而且还是实时刷新的哦-";
    }


}

注意:

必须贴上@RefreshScope 在类上才有效果

**@RefreshScope 操作原理:**当配置发生更新时,贴有@RefreshScope注解的类会重新IOC创建新的对象,该类中加载的数据重新更新。

9.5 配置共享

9.5.1 配置环境

真实项目开发一般会有3套部署环境,

**开发:**dev,配置是开发的环境,比如开发环境数据库四要素,Redis环境等。

**测试:**test,配置是测试的环境,比如测试环境数据库四要素,Redis环境等。

**生产:**prod,配置是线上真实的环境,比如生产环境线上真实数据库四要素,Redis环境等。

所以在项目开发时,必须编写3个配置环境文件

appliction-dev.yaml  #开发
appliction-test.yaml #测试
appliction-prod.yaml #生产

按这个标准,上面的案例还需要在nacos中创建2个配置文件

product-service-test.yaml
product-service-prod.yaml

nacos非常贴心,提供克隆功能
在这里插入图片描述

在这里插入图片描述

同时项目启动前需要明确指定要激活环境

spring:
  profiles:
    active: dev # 环境标识

那么这不又是要回来改代码,还是要重启啊,那我们是不是可以将项目打车jar包,然后启动的时候,通过java -jar 命令中的参数来控制啊

java -jar .\xxx-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

9.5.2 环境配置文件共享

当环境多了,那对应的配置也会越来越多,这时你会发现有很多配置是重复的,此时就要考虑可不可以将相同配置提取出来,放置到一个共有文件中,然后实现共享呢?答案是Yes

第一种场景:同一个微服务配置文件共享

操作上非常简单,只需要写一个以:spring.application.name 命名的配置文件即可。

比如:

application-dev.yaml ,application-test.yaml ,application-prod.yaml

提取公共文件名:application.yaml 看到没,没有后缀即可。

回到nacos的案例,只需要配置多一个文件:product-service.yaml 就可以啦。

案例

将之前的配置删掉:product-service-test.yaml product-service-prod.yaml

appConfig:
  name: dafei hello

项目中是配置 dev

spring:
  profiles:
    active: dev # 环境标识

项目启动之后,报错

在这里插入图片描述

切换到test环境也报错

此时只需要额外添加一个配置文件:product-service.yaml

在这里插入图片描述

再次启动发现可以正常启动成功,并且测试:http://localhost:8081/appconfigname 一切ok!

第二种场景:不同微服务中间配置文件共享

不同为服务之间也可以实现配置共享,原理有点类似于文件引入,就是定义一个公共配置文件,然后在当前配置文件中引

入。

操作步骤:

1>在nacos中定义一个DataID为global-config.yaml的配置,用于所有微服务共享

globalConfig: global

在这里插入图片描述

2>修改bootstrap.yaml

spring:
  application:
    name: product-service
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #nacos中心地址
        file-extension: yaml # 配置文件格式
        shared-configs:
          - data-id: global-config.yaml # 配置要引入的配置
            refresh: true
  profiles:
    active: test # 环境标识

2>在NacosConfigController.java中新增一个方法

@RestController
@RefreshScope
public class NacosConfigController {
    @Value("${appConfig.name}")
    private String appConfigName;
    @Value("${globalConfig}")
    private String globalConfig;
    
    @RequestMapping("/nacosConfig")
    public String nacosConfig(){
        return "远程信息:"+appConfigName;
    }

    @RequestMapping("/nacosConfig2")
    public String nacosConfig2(){
        return "全局配置:"+globalConfig;
    }
}

ller {
@Value(“ a p p C o n f i g . n a m e " ) p r i v a t e S t r i n g a p p C o n f i g N a m e ; @ V a l u e ( " {appConfig.name}") private String appConfigName; @Value(" appConfig.name")privateStringappConfigName;@Value("{globalConfig}”)
private String globalConfig;

@RequestMapping("/nacosConfig")
public String nacosConfig(){
    return "远程信息:"+appConfigName;
}

@RequestMapping("/nacosConfig2")
public String nacosConfig2(){
    return "全局配置:"+globalConfig;
}

}




3>重启服务并测试.

标签:06,配置文件,SpringCloud,配置,环境,Nacos,nacos,yaml,服务
From: https://blog.csdn.net/Fuck1269185654/article/details/143267895

相关文章

  • SpringCloud Alibaba 01 (微服务的概念理解,微服务的环境搭建,微服务的服务注册中心Nacos
    目录了解微服务常用的概念了解项目架构演变掌握微服务环境搭建掌握微服务治理组件-NacosDiscovery掌握微服务负载均衡调度组件-Ribbon掌握微服务远程调度组件-Feign掌握微服务流控容错组件-Sentinel掌握微服务网关组件-Gateway掌握微服务链路追踪组件-Sleuth&Zi......
  • c#基于ASP.NET网上订餐系统的设计与实现,计算机毕业设计源码 006,计算机程序开发定制
    摘 要自从计算机发展开始,计算机软硬件相关技术的发展速度越来越快,在信息化高速发展的今天,计算机应用技术似乎已经应用到了各个领域。在餐饮行业,除了外卖以外就是到店里就餐,在店里就餐如果需要等待点餐的话,用户的体验度就会急剧下降,很多餐饮店也开始开发网上订餐的系统,这样......
  • 【代码随想录Day54】图论Part06
    冗余连接题目链接/文章讲解:代码随想录importjava.util.Scanner;publicclassMain{privateintnumberOfNodes;//节点数量privateint[]parent;//存储每个节点的父节点//构造函数初始化并查集publicMain(intsize){numberOfNod......
  • 【深入理解SpringCloud微服务】Hystrix作用与原理剖析
    【深入理解SpringCloud微服务】Hystrix作用与原理剖析Hystrix的作用熔断降级隔离Hystrix有限流的功能吗?Hystrix的原理@HystrixCommand注解是如何起作用的工作流程1、构建命令对象2、执行命令3、检查缓存是否开启并且是否命中4、检查断路器是否打开5、检查线程池或信号量......
  • C06.L01.筛选法求质数.质数个数(筛选法优化)
    题目描述输入n,输出1~n以内的质数的个数。(n<=1000)输入格式一个整数n。输出格式一个整数,代表1~n以内的质数的个数。样例输入数据110Copy输出数据14代码:#include<bits/stdc++.h>usingnamespacestd;boolflag[1001];intmain(){     ......
  • NodeJS期刊投稿信息查询系统-毕业设计源码06128
    摘要本文详述了一个基于微信小程序和Node.js技术的期刊投稿信息查询系统的设计与实现过程。该系统旨在为用户提供便捷、高效的投稿信息查询服务,同时为管理员提供强大的后台管理功能。通过微信小程序,用户可以轻松登录、注册,并访问首页查看期刊信息、投稿状态以及网站公告。......
  • 060 单文件组件
    Vue的单文件组件用.vue结尾单文件组件的格式如下:别忘了template标签是不参与编译的,最后在页面上不显示School组件vue结构快捷键<vapp组件main.jsindex.html准备容器如果想在容器中什么都不写,调整main.js......
  • Java开发学习day06--方法
    随笔记录学习之路,如有侵权请联系我删除,学习内容主要来自黑马 1.方法概述1.1方法的概念:方法(method)是程序中最小的执行单元注意:    方法必须先创建才可以使用,该过程成为方法定义    方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用2.......
  • SpringCloud
    1.学习前言1.1学习前提熟练使用SpringBoot微服务快速开发框架了解过Dubbo+Zookeeper分布式基础电脑配置内存不低于8G(我自己的是16G)1.2文章大纲SpringCloud五大组件服务注册与发现——NetflixEureka负载均衡:客户端负载均衡——NetflixRibbon服务端负......
  • Nacos
    Nacos注册中心①:Nacos基础Linux的安装配置 nacos的默认端口号为8848登录的用户名和密码默认的都是nacos②:服务注册到Nacos<!--父工程管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dep......