springcloud微服务应用-config配置中心(介绍搭建动态刷新测试)(代码片段)

Xd聊架构 Xd聊架构     2023-01-26     783

关键词:

文章目录


前言

在系统架构中,和安全、日志、监控等非功能需求同样,配置管理也是一种非功能需求。配置中心是整个微服务基础架构体系中的一个组件,如下图,它的功能看上去并不起眼,无非就是简单配置的管理和存取,但它是整个微服务架构中不可或缺的一环。另外,配置中心若是真得用好了,它还能推进技术组织持续交付和DevOps转型。


一、传统应用配置痛点

  • 配置散乱格式不标准
    有的用 properties 格式,有的用 xml 格式,还有的存 DB,团队倾向自造轮子,作法五花八门。
  • 主要采用本地静态配置,配置修改麻烦
    配置修改通常须要通过一个较长的测试发布周期。在分布式微服务环境下,当服务实例不少时,修改配置费时费力。
  • 易引起生产事故
    团队在发布的时候将测试环境的配置带到生产上,引起资损事故。
  • 配置缺少安全审计和版本控制功能

二、Config 配置中心介绍

配置中心实际上就是分布式系统中集中统一管理线上应用程序配置项的管理平台。
在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了。不仅如此,分散中还伴随着冗余,如下图所示:

创建配置中心,将配置从各个应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置。如下图所示:

总结起来最主要包括以下三方面核心功能

  • 配置统一管理
    配置项的修改编辑统一在配置中心页面进行,还包括统一的配置版本管理、环境隔离、灰度发布以及热发布,在不重启应用的情况下使得修改的配置可以生效起作用。

  • 权限统一控制
    主要控制其配置的读取权限以及修改权限,通过统一的权限管理提升运维效率。

  • 操作统一审计
    记录用户操作修改配置的历史信息,这样在出现问题的时候可以进行复盘回查,同时进行操作审计。


三、服务端Config Server搭建

1.pom依赖

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
		<!-- 动态刷新使用 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>

2.application启动类配置

@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ConfigServerApplication 
	public static void main(String[] args) 
		SpringApplication.run(ConfigServerApplication.class, args);
	

3.application.yml配置

spring:
  application:
    name: config-server
    # 使用本地文件,也可配置成从git获取配置文件
  profiles:
    active:
      - native
  cloud:
    config:
      server:
        native:
          search-locations: classpath:/config
      allow-override: true
      override-none: true
      override-system-properties: false
      discovery:
        enabled: true
      fail-fast: true
# 注册eureka地址,提供客户端eureka访问      
eureka:
  client:
    serviceUrl:
      defaultZone: http://ip:port/eureka/
server:
  port: 8889

4.test-dev.xml(客户端应读取的配置)

profile:
  dev
spring:
  rabbitmq:
    host: 10.10.10.10
    port: 5672
    username: admin
    password: 123456

test:
  override: client-server
  refresh: re3

5.项目结构


四、客户端Config Client搭建

1.pom依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
		<!-- 动态刷新使用 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>

2.application启动类配置

@SpringBootApplication
@EnableEurekaClient
public class ConfigClientApplication 

	public static void main(String[] args) 
		SpringApplication.run(ConfigClientApplication.class, args);
	


3.bootstrap.yml配置

创建bootstrap.yml配置,因为启动服务会优先采用这个文件的配置,然后是application.yml的配置,服务器启动核心配置可能在配置中心,所以必须创建bootstrap.yml,优先连接配置中心

spring:
  cloud:
    config:
      # 采用的是test-dev.yml,name是前缀,profile是后缀,label是git存放的分支节点(本次未使用)
      name: test
      profile: dev
      label: dev
      # 通过service-id(eureka服务名)连接配置中心
      discovery:
        enabled: true
        service-id: config-server

eureka:
  client:
    serviceUrl:
      defaultZone: http://ip:port/eureka/

4.application.yml配置

server:
  port: 8888
spring:
  application:
    name: config-client
eureka:
  client:
    serviceUrl:
      defaultZone: http://ip:port/eureka/

# 动态刷新使用
management:
  endpoints:
    web:
      exposure:
        # 暴露监控接口,*为全部接口
        include: '*'

5.测试controller

@RestController
@RefreshScope
public class TestController 
    @Value("$spring.rabbitmq.host")
    String host;
    @Value("$test.override")
    String override;
    @Value("$test.refresh")
    String refresh;

    @RequestMapping("/config")
    public String getConfig()
        return host;
    

    @RequestMapping("/override")
    public String getOverride()
        return override;
    

    @RequestMapping("/refresh")
    public String getRefresh()
        return refresh;
    


6.项目结构


五.动态刷新

上述配置中已经包含了动态刷新配置,让我们一起看一下,是哪些配置起到的作用呢

1.客户端Config client,添加spring-boot-starter-actuator依赖

		<!-- 动态刷新使用 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>

2.Controller层添加注解@RefreshScope

@RestController
@RefreshScope
public class TestController

3.客户端application.yml增加配置

# 动态刷新使用
management:
  endpoints:
    web:
      exposure:
        # 暴露监控接口,*为全部接口
        include: '*'

4.客户端手动调用动态刷新接口

http://localhost:8888/actuator/refresh


六.测试

开启eureka,gateway,config server,config client服务,注意开启顺序

1.调用TestController中config接口


返回了server中mq的ip,正确

2.调用TestController中override接口

返回了server中test.override的配置,覆盖了client的test.override

3.调用TestController中refresh接口(动态刷新)


现在,我们修改server中test.refresh配置,由re2改为re3
重启client server(因为配置中心的配置文件采用的服务端管理,如果放置git可以不用重启)
重启完成后再起请求refresh接口

仍然返回re2,现在我们调用刷新接口

注意设置Post的header属性Content-Type=application/json

刷新成功,并返回了属性名称,再次请求refresh接口,得到最新的配置:re3


结尾

  • 感谢大家的耐心阅读,如有建议请私信或评论留言。
  • 如有收获,劳烦支持,关注、点赞、评论、收藏均可,博主会经常更新,与大家共同进步

springcloud-config配置中心

...候,一套集中式的、动态的配置管理中心是必不可少的,SpringCloud提供了ConfigServer来解决这个问题。是什么?SpringCloudConfig为微服务提供了集中化的外部配置支持,配置服务器为不同微服务应用 查看详情

springcloud微服务分布式云架构-commonservice-config配置服务搭建

1.介绍SpringCloudConfig为分布式系统中的外部配置提供服务器和客户端支持。使用ConfigServer,您可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与SpringEnvironment和PropertySource抽象相同,因此它们与Spring应用... 查看详情

springcloud微服务(06):config组件,实现配置统一管理

...上,如果一个配置发生变化,需要修改很多的服务配置。springcloud提供配置中心,来解决这个场景问题。系统中的通用配置存储在相同的地址:GitHub,Gitee,本地配置服务等,然后配置中心读取配置以restful发布出来,其它服务可以... 查看详情

springcloud——什么是微服务?

....服务之间基于HTTP的RestfulAPI通信协作 二、为什么选择SpringCloud?1.基于SpringBoot实现的微服务架构工具。2.组成Config:配置中心,支持git存储配置,实现应用配置外部化,客户端动态修改配置信息Eureka:服务的注册与发现Hystrix... 查看详情

springcloud构建微服务架构分布式配置中心

在本文中,我们将学习如何构建一个基于Git存储的分布式配置中心,并对客户端进行改造,并让其能够从配置中心获取配置信息并绑定到代码中的整个过程。准备配置仓库准备一个git仓库,可以在码云或Github上创建都可以。假设... 查看详情

springcloud-config配置中心初级篇

...在配置文件中读取或者修改自定义的属性就非常不方便,springcloud官方推出了config配置中心,用于统一管理配置文件;配置中心实现的大体流场如下:客户端从服务端获取配置文件,通常服务端需要负载均衡和高可用;服 查看详情

springcloud框架之config分布式配置中心(代码片段)

本笔记内容为尚硅谷SpringCloud框架开发Config配置中心部分目录一、概述1、是什么2、作用二、Config服务端配置与测试1、建仓库并克隆2、新建项目1.新建Module2.POM3.YML4.主启动类5.windows下修改hosts文件,增加映射6.测试通过Config微... 查看详情

springcloud-springcloud之config分布式配置;server,client配置(十五)(代码片段)

阅读本文前可先参考​​​​​​SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客在分布式微服务系统中,几乎所有服务的运行都离不开配置文件的支持,这些配置文件通常由各个服务... 查看详情

使用idea从0开始搭建springcloud微服务

...均来源于一个微服务初学者的实践,仅供参考。首先启动SpringCloudEureka注册中心,其他部分都作为服务注册到Eureka,并通过注册的服务名互相访问。SpringCloudConfig提供统一的配置信息,供其他服务读取。Provider生产者服务不直接对... 查看详情

springcloudhoxton——config服务配置

...所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题。SpringCloudConfig为微服务架构中的微服务提供集中化的外部配置支持&#x 查看详情

springcloudhoxton——config服务配置

...所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题。SpringCloudConfig为微服务架构中的微服务提供集中化的外部配置支持&#x 查看详情

springcloud构建微服务架构分布式配置中心

SpringCloudConfig是SpringCloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,... 查看详情

构建微服务架构springcloud:分布式配置中心

SpringCloudConfig是SpringCloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,... 查看详情

springcloud微服务:阿里开源组件nacos,服务和配置管理

...包含开发分布式应用微服务的必需组件,方便开发者通过SpringCloud编程模型轻松使用这些组件来开发分布式应用服务。只需要添加一些注解和少量配置,就可以将SpringCloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭... 查看详情

springcloud配置中心

SpringCloudConfig简介 SpringCloudConfig是SpringCloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个... 查看详情

springcloud服务配置中心

SpringCloudConfig简介SpringCloudConfig是SpringCloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立... 查看详情

springcloud配置实战:演示和测试切换

参考技术ASpringCloud配置实战:演示和测试切换。我们现在将实现注册中心和SpringCloud提供者配置信息从SpringCloudConfig读取配置文件的方式工具/材料SpringCloudConfigIntellijidea01现在我们的Config服务端配置OK而且测试通过,我们可以从Conf... 查看详情

springcloud07(服务配置中心)

SpringCloudConfig简介 SpringCloudConfig是SpringCloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个... 查看详情