06 nacos配置管理

配置中心

配置主要有以下几个特点:

  • 配置是独立于程序的只读变量
    • 配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置
  • 配置伴随应用的整个生命周期
    • 配置贯穿于应用的整个生命周期,应用在启动时通过读取配置来初始化,在运行时根据配置调整行为。
      比如:启动时需要读取服务的端口号、系统在运行过程中需要读取定时策略执行定时任务等。
  • 配置可以有多种加载方式
    • 常见的有程序内部hard code,配置文件,环境变量,启动参数,基于数据库等
  • 配置需要管理
    • 同一份程序在不同的环境(开发,测试,生产)、不同的集群(如不同的数据中心)经常需要有不同的配置,所以需要有完善的环境、集群配置管理

应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。

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

主流配置中心
在这里插入图片描述

nacos配置中心

在这里插入图片描述

在 配置管理 ,配置列表 页面,新建配置,并发布
在这里插入图片描述
在这里插入图片描述
在nacos-restful-consumerf服务,获取配置

增加配置坐标

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring‐cloud‐starter‐alibaba‐nacos‐config</artifactId>
</dependency>
  • bootstrap.yml
    要使用配置中心就要在bootstrap.yml中来配置,bootstrap.yml配置文件的加载顺序要比application.yml要优先。
server:
  port: 56020

spring:
  application:
    name: nacos-restful-consumer #服务名
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848  #服务发现中心地址
      config:
        server-addr: 127.0.0.1:8848 #指定配置中心地址
        file-extension: yml #指定配置文件的扩展名,配置文件美名称根据 application.name 名称 加扩展名进行拼装 nacos-restful-consumer.yml


# 负载均衡随机策略
nacos-restful-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

  • controller获取配置中心配置文件数据
package li.chen.com.nacos.controller;

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.net.URI;

@RestController
@RequestMapping("/RestConsumerController")
public class RestConsumerController {

	// 注入配置文件上下文;动态获取配置数据,即在nacos中修改发布后,自动获取最新的数据
	@Autowired
	private ConfigurableApplicationContext applicationContext;
	
	@GetMapping(value = "/configs")
	public String getConfigs(){
		return applicationContext.getEnvironment().getProperty("common.name");
	}

	/*
    @Value("${common.name}")
    private String name;

    @GetMapping("/configs")
    public String getName(){
        return name;
        
    */
    
}
nacos配置管理模型

对于Nacos配置管理,通过Namespace、group、Data ID能够定位到一个配置集。
在这里插入图片描述
配置集(Data ID)
在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。每个配置集都可以定义一个有意义的名称,就是配置集的ID即Data ID。

配置项
配置集中包含的一个个配置内容就是配置项。它代表一个具体的可配置的参数与其值域,通常以 key=value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。

配置分组(Group)
配置分组是对配置集进行分组,通过一个有意义的字符串(如 Buy 或 Trade )来表示,不同的配置分组下可以有相同的配置集(Data ID)。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:可用于区分不同的项目或应用,例如:学生管理系统的配置集可以定义一个group为:STUDENT_GROUP。

命名空间(Namespace)
命名空间(namespace)可用于进行不同环境的配置隔离。例如可以隔离开发环境、测试环境和生产环境,因为它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过namespace隔离。不同的命名空间下,可以存在相同名称的配置分组(Group) 或 配置集。

在这里插入图片描述
Namespace:代表不同环境,如开发、测试、生产环境。
Group:代表某项目,如XX医疗项目、XX电商项目
DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件

config:
  server‐addr: 127.0.0.1:8848 # 配置中心地址
  file‐extension: yaml
  namespace: a1f8e863‐3117‐48c4‐9dd3‐e9ddc2af90a8 # 开发环境
  group: DEFAULT_GROUP # xx业务组

1、nacos服务地址,必须指定
2、namespace,如不指定默认public ,在config中指定namespace,例子如上:
3、group,如不指定默认 DEFAULT_GROUP 例子如上。
4、dataId,必须指定,名称为应用名称+配置文件扩展名

自定义扩展的Data Id 配置

新增 自定义扩展 ext-config-common01.yaml
在这里插入图片描述
新增 自定义扩展 ext-config-common02.yaml
在这里插入图片描述

在nacos-restful-consumerf服务,获取配置

增加配置坐标

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring‐cloud‐starter‐alibaba‐nacos‐config</artifactId>
</dependency>
  • bootstrap.yml
    要使用配置中心就要在bootstrap.yml中来配置,bootstrap.yml配置文件的加载顺序要比application.yml要优先。
server:
  port: 56020

spring:
  application:
    name: nacos-restful-consumer #服务名
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848  #服务发现中心地址
      config:
        server-addr: 127.0.0.1:8848 #指定配置中心地址
        file-extension: yml #指定配置文件的扩展名,配置文件美名称根据 application.name 名称 加扩展名进行拼装 nacos-restful-consumer.yml
        
        # 自定义 Data Id 的配置
        # 1、Data Id group:组名,refresh:动态刷新
        ext‐config[0]:
          data‐id: ext‐config‐common01.yaml
          group: COMMON_GROUP
          refresh: true
        ext‐config[1]:
          data‐id: ext‐config‐common02.yaml
          group: COMMON_GROUP
          refresh: true


# 负载均衡随机策略
nacos-restful-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

- 通过 spring.cloud.nacos.config.ext-config[n].data-id 的配置方式来支持多个 Data Id 的配置。
- 通过 spring.cloud.nacos.config.ext-config[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
- 通过 spring.cloud.nacos.config.ext-config[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是
否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。
- Note : spring.cloud.nacos.config.ext-config[n].data-id 的值必须带文件扩展名,文件扩展名既可支持properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响
  • controller获取配置中心配置文件数据
package li.chen.com.nacos.controller;

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.net.URI;

@RestController
@RequestMapping("/RestConsumerController")
public class RestConsumerController {

	// 注入配置文件上下文;动态获取配置数据,即在nacos中修改发布后,自动获取最新的数据
	@Autowired
	private ConfigurableApplicationContext applicationContext;
	
	@GetMapping(value = "/configs")
	public String getConfigs(){
		String name = applicationContext.getEnvironment().getProperty("common.name");
		String address = applicationContext.getEnvironment().getProperty("common.addr");
		return name+address;
	}
}

http://127.0.0.1:56020/configs

nacos config | hainan

nacos config 为nacos-restful-consumer.yml 主配置优先级大于自定义扩展配置,取主配置属性值
hainan 为 ext-config-common02.yaml 中的,原因为ext‐config[1] 下标越大,优先级越高,会替换之前的。

tomcat路径配置

在配置文件增加此配置,访问路径如下
http://127.0.0.1:56020/a/configs

#tomcat头信息和访问路径配置
server:
  tomcat:
    remote_ip_header: x‐forwarded‐for
    protocol_header: x‐forwarded‐proto
  servlet:
    context‐path: /a
  use‐forward‐headers: true

若在主配置文件中配置,访问路径如下
http://127.0.0.1:56020/configs

#tomcat头信息和访问路径配置
server:
  servlet:
    context‐path: /*
  use‐forward‐headers: true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岿然如故

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值