SpringCloud Nacos配置中心管理超详细讲解

目录
  • 一、Nacos配置管理
    • 1.1 统一配置管理
      • 1.1.1在nacos中添加配置文件
      • 1.1.2 从微服务拉取配置
    • 1.2 配置热更新
      • 1.2.1 方式一
      • 1.2.2 方式二
    • 1.3 配置共享

一、Nacos配置管理

Nacos除了可以做注册中心,同样可以做配置管理来用

1.1 统一配置管理

当微服务部署越来越多,达到数十,数百时,逐个修改微服务配置就会很麻烦,且容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。

Nacos一方面更可以将配置集中管理另一方面在配置变更时,及时通知微服务,实现配置的热更新。

1.1.1在nacos中添加配置文件

如何在nacos中添加配置文件

然后在弹出的表单中,填写配置信息:

注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。

1.1.2 从微服务拉取配置

微服务要拉取nacos中管理的配置,并且与本地的application.yml配合合并才能完成项目的启动。

但是如果尚未读取application.yml,又如何得知nacos地址呢?

因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:

引入nacos-config依赖

首先,在user-serivice服务中,引入nacos-config的客户端依赖:

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2)添加bootstrap.yaml

然后,在user-service中添加一个bootstrap.yaml文件,内容如下:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。

本例中,就是去读取userservice-dev.yaml

3)读取nacos配置

在user-service中的UserController中添加业务逻辑,读取pattern.dateformat配置:

完整代码:

import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @Value("${pattern.dateformat}")
    private String dateformat;
    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
}

在页面访问,可以看到效果:

1.2 配置热更新

我们最终的目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新。

要实现配置热更新,可以使用两种方式:

1.2.1 方式一

在@Value注入的变量所在类上添加注解@RefreshScope:

1.2.2 方式二

使用@ConfigurationProperties注解代替@Value注解。

在user-service服务中,添加一个类,读取patterrn.dateformat属性:

package cn.itcast.user.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

在UserController中使用这个类代替@Value:

完整代码:

import cn.itcast.user.config.PatternProperties;
import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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 java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @Autowired
    private PatternProperties patternProperties;
    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
    }
}

1.3 配置共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

下面我们通过案例来测试配置共享

1)添加一个环境共享配置

我们在nacos中添加一个userservice.yaml文件:

2)在user-service中读取共享配置

在user-service服务中,修改PatternProperties类,读取新添加的属性:

在user-service服务中,修改UserController,添加一个方法:

3)运行两个UserApplication,使用不同的profile

这样,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。

启动UserApplication和UserApplication2

访问http://localhost:8081/user/prop,结果:

访问http://localhost:8082/user/prop,结果:

可以看出来,不管是dev,还是test环境,都读取到了envSharedValue这个属性的值。

4)配置共享的优先级

当nacos、服务本地同时出现相同属性时,优先级有高低之分:

到此这篇关于SpringCloud Nacos配置中心管理超详细讲解的文章就介绍到这了,更多相关SpringCloud Nacos配置中心内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Nacos Discovery服务治理解决方案

    目录 前言 服务治理 什么是服务治理? 常见的注册中心 Zookeeper Eureka Consul Nacos Nacos 入门 搭建nacos环境 将商品微服务注册到nacos 将订单微服务注册到nacos 总结 前言 上一章中,我们利用用户–订单–商品,实现了三个简单的微服务,实现了微服务之间的调用.但不知道大家有没有发现,我们是通过硬编码的方式,把服务者,消费者的服务Url,写到了代码中,这样做肯定是不行的,存在着许多的问题,比如: 一旦服务提供者地址变化,就需要手工修改代码一旦是多个

  • Nacos 动态服务发现、配置和服务管理平台初体验

    目录 Nacos简介 Nacos特性 1.服务发现与服务健康检查 2.动态配置服务 3.动态DNS服务 4.服务及其元数据管理 安装与启动 (1). 启动 (2). 访问 Nacos配置中心 Nacos注册中心 使用 Nacos简介 Nacos 英文全称为 Dynamic Naming and Configuration Service,是一个由阿里巴巴团队使用 Java 语言开发的开源项目.官网地址:https://nacos.io Nacos特性 1.服务发现与服务健康检查 Nacos作为注

  • Spring Cloud 整合 nacos实现动态配置中心的详细步骤

    目录 前提条件 整合步骤 1. 添加依赖 2. 新建 nacos 配置 3. bootstrap.properties 配置 4. 配置dataId 4.1 自动配置 dataId 4.2 手动设置 dataId 5.获取数据 总结 源码 参考文献 上一篇文章讲解了Spring Cloud 整合 nacos 实现服务注册与发现,nacos除了有服务注册与发现的功能,还有提供动态配置服务的功能.本文主要讲解Spring Cloud 整合nacos实现动态配置服务.主要参考官方部署手册点我. 前提条

  • Nacos 版本不一致报错Request nacos server failed解决

    目录 正文 原因分析 版本不一致 解决方案 总结 正文 在做微服务开发中,测试环境使用Nacos没有问题,但是生产环境服务启动一直报错: com.alibaba.nacos.api.exception.NacosException: Request nacos server failed:     at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClien

  • SpringCloud将Nacos作为配置中心实现流程详解

    目录 1.引入依赖 2.配置Bootstrap.yml 3.配置application.yml 4.Controller测试接口 在Nacos中添加配置信息 匹配规则-理论 dataId的完整格式 配置新增 Namespace+Group+DatalD讲解 实例-三种方案加载配置 1.dataId方案 2.Group方案 3.Namespace方案 1.引入依赖 <dependencies> <!--nacos-config--> <dependency> <gr

  • Springcloud中的Nacos Config服务配置流程分析

    目录 简介 nacos config快速开始 依赖引入 配置nacos config 启动测试 配置动态更新配置 简介 前边写过几个微服务,订单微服务,商品微服务,账户微服务,库存微服务,每个微服务都去配置自己的配置文件,每个微服务一个yml配置文件,这样如果微服务足够多,对于配置文件的管理就很麻烦,如果配置文件变动需要更改,则需要我们一个一个的去改.例如开发环境,测试环境,生产环境等等,而且配置文件无法实时更新.我们修改了配置文件之后,必须重新启动微服务才能使配置生效.配置中心就可以解决配置问

  • SpringCloud Nacos配置中心管理超详细讲解

    目录 一.Nacos配置管理 1.1 统一配置管理 1.1.1在nacos中添加配置文件 1.1.2 从微服务拉取配置 1.2 配置热更新 1.2.1 方式一 1.2.2 方式二 1.3 配置共享 一.Nacos配置管理 Nacos除了可以做注册中心,同样可以做配置管理来用 1.1 统一配置管理 当微服务部署越来越多,达到数十,数百时,逐个修改微服务配置就会很麻烦,且容易出错.我们需要一种统一配置管理方案,可以集中管理所有实例的配置. Nacos一方面更可以将配置集中管理另一方面在配置变更时,及

  • C语言可变参数与内存管理超详细讲解

    目录 概述 动态分配内存 重新调整内存的大小和释放内存 概述 有时,您可能会碰到这样的情况,您希望函数带有可变数量的参数,而不是预定义数量的参数.C 语言为这种情况提供了一个解决方案,它允许您定义一个函数,能根据具体的需求接受可变数量的参数.下面的实例演示了这种函数的定义. int func(int, ... ) { . . . } int main() { func(2, 2, 3); func(3, 2, 3, 4); } 请注意,函数func()最后一个参数写成省略号,即三个点号(...)

  • SpringCloud Nacos作为配置中心超详细讲解

    目录 前言 Nacos配置模型 配置介绍 实际演练 前言 在单体架构的时候我们可以将配置写在配置文件中,但有⼀个缺点就是每次修改配置都需要重启服务才能生效. 当应用程序实例比较少的时候还可以维护.如果转向微服务架构有成百上千个实例,每修改⼀次配置要将全部实例重启,不仅增加了系统的不稳定性,也提高了维护的成本. 那么如何能够做到服务不重启就可以修改配置?所有就产生了四个基础诉求: 需要支持动态修改配置 需要动态变更有多实时 变更快了之后如何管控控制变更风险,如灰度.回滚等 敏感配置如何做安全配置

  • SpringCloud OpenFeign超详细讲解模板化远程通信的实现

    目录 1. openFeign实现 1.1 pom依赖 1.2 yaml配置 1.3 客户端调用代码 1.4.服务端暴露接口 1.5.测试日志 1. openFeign实现 基于spring-boot-starter-parent 2.6.8,spring-cloud-dependencies 2021.0.3,一个order服务一个user服务 1.1 pom依赖 <!--nacos服务注册与发现--> <dependency> <groupId>com.alibab

  • SpringCloud超详细讲解Feign声明式服务调用

    目录 入门案例 @FeignClient注解详解 Feign Client的配置 Feign请求添加headers 负载均衡 (Ribbon) 容错机制 Hystrix支持 Sentinel支持 Feign开启容错机制支持后的使用方式 请求压缩feign.compression 日志级别 入门案例 在服务消费者导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>

  • SpringCloud超详细讲解负载均衡组件Ribbon源码

    目录 前言 项目实战 创建项目 启动项目验证 源码分析 选择服务 地址替换 总结 前言 上一篇文章中我们通过自己开发了一个负载均衡组件,实现了随机算法的负载均衡功能,如果要实现其他算法,还需要修改代码增加相应的功能.这一篇文章,我们将介绍一个更简单的负载均衡实现,使用**@LoadBalanced**注解实现负载均衡的功能. 项目实战 创建项目 同样的,我们的项目现在依然有一个registry注册中心,一个provider服务提供者,接下来,我们再次修改一下consumer服务消费者的代码: @

  • SpringCloud超详细讲解微服务网关Gateway

    目录 前言 微服务网关GateWay介绍 GateWay特性介绍 Gateway 中的相关术语 Gateway实战 1.创建项目gateway 2.创建启动类 3.新增配置文件 4.编程方式实现路由 5.启动验证 总结 前言 上一篇:微服务网关Zuul 上文中,我们介绍了微服务网关Zuul,Zuul 是 Netflix 公司开源的产品,被称为第一代网关,也是 Spring Cloud 前几个版本默认使用的一款提供动态路由微服务网关组件,但是随着 Netflix 公司一系列的停更事件,在最新的 S

  • SpringCloud超详细讲解微服务网关Zuul

    目录 网关的作用 Spring Cloud 网关组件Zuul介绍 Zuul网关实战 1.创建服务 2.创建配置文件 3.创建Zuul过滤器 4.编写启动类 5.启动验证 总结 网关的作用 微服务架构中,服务实例的地址可能经常会发生变化,所以我们不能直接将服务的地址暴露出来.如果每一个微服务都直接暴露接口,会导致一系列的问题,比如调用过于复杂,涉及到账户.权限不能统一处理等.另外基于高内聚低耦合的设计准则来讲,我们也应该将内部系统和外部系统做切割. 因此,这时就需要有一个独立的组件来处理外部的请求

  • 超详细讲解SpringCloud Commons公共抽象的用法

    目录 Spring Cloud Commons公共抽象 @EnableDiscoveryClient 服务注册ServiceRegistry RestTemplate的负载均衡 RestTemplate的失败重试 本期主角——Spring Cloud Commons:公共抽象 Spring Cloud Commons公共抽象 Spring Cloud将服务发现.负载均衡和断路器等通用模型封装在一个公共抽象中,可以被所有的Spring Cloud客户端使用,不依赖于具体的实现(例如服务发现就有Eu

  • SpringBoot超详细讲解自动配置原理

    目录 SpringBoot自动配置原理 SpringBoot特点 1.依赖管理 A.父项目做依赖管理 B.开发导入starter场景启动器 C.可以修改默认版本号 2.自动配置 A.自动配好Tomcat B.自动配好SpringMVC C.默认的包结构 D.各种配置拥有默认值 E.按需要加载所有自动配置项 SpringBoot自动配置原理 了解SpringBoot自动配置原理 1.SpringBoot特点 2.容器功能 3.自动配置原理入门 4.开发技巧 SpringBoot特点 1.依赖管理

随机推荐