目录

一、配置问题分析及解决方案

1、问题分析

2、解决方案

二、Spring Cloud Config 介绍

1、Spring Cloud Config特性

2、Spring Cloud Config作用

3、Spring Cloud Config 组件

统一配置中心服务端

统一配置中心客户端

4、Spring Cloud Config 工作流程

三、 配置中心使用

1 搭建远程 git 仓库

1.1 新建远程仓储

1.2.创建远程仓储管理的配置文件

2搭建统一配置服务中心服务端

2.1创建项目,引入依赖

2.2 创建启动类 添加注解@EnableConfigServer

2.3 配置 config Server 管理的远端仓储信息

2.4 ConfigServer 获取远端配置信息测试

3、搭建统一配置服务中心客户端

3.1 创建项目,引入依赖

3.2 订单服务配置

3.3 创建订单服务controller

3.4 创建启动类

3.5 启动测试


一、配置问题分析及解决方案

1、问题分析

通过上图可知,每个微服务都有一个配置文件,目前只是11个微服务,就需要11个配置文件,若有上百个微服务呢?常规配置管理解决方案缺如下:

  • 硬编码(需要修改代码、繁琐、风险大)
  • properties 或者 yml(集群环境下需要替换和重启)
  • xml(重新打包和重启)

2、解决方案

使用Spring Cloud Config集中式配置管理中心,用来实现微服务系统中服务配置的统一管理。

组件:统一配置中心服务端集中管理配置文件、统一配置中心客户端就是各微服务。

二、Spring Cloud Config 介绍

1、Spring Cloud Config特性

  • 提供服务端和客户端支持(Spring Cloud Config Server 和 Spring Cloud Config Client)
  • 集中式管理分布式环境下的应用部署
  • 属性值的加密和解密(对称加密和非对称加密)
  • 基于 Spring 环境,无缝与 Spring 应用集成
  • 可用于任何语言开发的程序
  • 默认实现基于 Git ,可以进行版本管理

2、Spring Cloud Config作用

  • Spring Cloud Config集中管理配置文件
  • 不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
  • 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取自己的配置
  • 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
  • 将配置信息以REST接口的形式暴露

3、Spring Cloud Config 组件

Spring Cloud Config 在微服务分布式系统中,采用Server 服务端「Client 客户端」的组件方式来提供可扩展的配置服务。

   统一配置中心服务端

  • 是一个独立的微服务应用
  • 集中管理配置文件
  • 提供配置文件的存储
  • 以接口的形式将配置文件的内容提供出去;

   统一配置中心客户端

  • 是各个微服务
  • 在启动的时候通过接口从配置中心获取和加载获取数据(配置信息)
  • 并依据此配置信息初始化自己的应用。

4、Spring Cloud Config 工作流程

工作流程:微服务即config client 到 config Server 获取配置文件,config Server 到远端仓库获取配置。

详细说明:统一配置中心服务端 config Server 也是一个微服务,这个微服务将来可能是个小集群,如果把所有配置都放到 config Server,一旦有版本改动,则整个小集群都需要改。因此,可以将所有微服务的配置统一放到 git 远程仓储上进行版本管理。config Server 只需要配置 git 远程仓储地址,在 config Server 启动时候,config Server 会到 git 远程仓储上进行拉取配置到本地仓储,启动后如果远程仓储的配置有改动,则 config Server 会自动检测到远程仓储的配置改动,进行自动拉取最新配置。其他微服务即config client 可以通过  config Server  获取所需配置信息。
因此需要搭建 git 远程仓储环境。

注意: 统一配置中心服务端 config Server 读取远程仓储的配置的时候是有一定的规则,因此在远程仓储中的配置文件命名也要有一定的规则。

  • 远程仓储配置文件命名规则

{application}-{profile}.yml/{application}-{profile}.properties

如:order-dev.yml、order-test.yml、order-prod.yml

  • config Server 读取远程仓储的配置规则:    

其中 label 代表的是分支例如master分支,profile代表的是环境。

如:http://localhost:7001/master/order-dev.yml
       如:http://localhost:7001/master/order-test.yml
       如:http://localhost:7001/order/dev/master
       如:http://localhost:7001/order/test/master

三、 配置中心使用

配置中心使用步骤

  • 搭建远程 git 仓储
  • 搭建统一配置服务中心服务端
  • 搭建统一配置服务中心客户端

1 搭建远程 git 仓库

1.1 新建远程仓储

1.2.创建远程仓储管理的配置文件

在远程仓储 master 分支上对订单服务的进行配置,环境分别是dev/test/prod。文件名分别为order-dev.yml、 order-test.yml、 order-prod.yml,订单服务的端口号分别为:9000、9100、9200,配置分别如下:

server:
  port: 9000
spring:
  application:
    name: order-service

# 配置eureka客户端信息
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8000/eureka/
  instance:
    prefer-ip-address: true
    # instance-id: order-service
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

2搭建统一配置服务中心服务端

2.1创建项目,引入依赖

搭建统一配置服务中心服务端 config server,创建项目,引入 统一服务配置中心 config 依赖。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloudbase</artifactId><groupId>com.hwadee.springcloud2022</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>configServer7009</artifactId><dependencies><!-- 添加统一服务配置中心 config--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><!--Eureka Client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies></project>

2.2 创建启动类 添加注解@EnableConfigServer

创建启动类,添加 注解@EnableConfigServer 启动 config服务端 应用。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient// 启动 eureka 客户端
@EnableConfigServer// 启动 config 服务端
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}

2.3 配置 config Server 管理的远端仓储信息

配置config Server服务端 要管理的远程仓库地址。

server:port: 7009
spring:application:name: config-service # 为当前商品服务命名cloud:config:server:git:#  username: xiashanzhu#  password: aa@86886830622uri: https://gitee.com/xiashanzhu/config-repo #要读取的远程仓库的配置文件的地址。default-label: master # 指定分支,不指定则默认master
eureka:client:service-url: # 配置服务注册地址,与 eureka-server 中暴露地址保持一致defaultZone: http://localhost:8000/eurekainstance:prefer-ip-address: true  # 是否使用 IP 地址注册,默认 false# instance-id: product-service  # 实例 id,服务的唯一标识instance-id: ${spring.cloud.client.ip-address}:${server.port} # 如果想在控制页面看到服务地址与端口,可以将 instance-id 这样配置lease-renewal-interval-in-seconds: 5  # 发送心跳的间隔,单位秒,默认 30lease-expiration-duration-in-seconds: 10 # 续约到期时间,单位秒,默认90

2.4 ConfigServer 获取远端配置信息测试

分别启动 注册中心 和 统一配置中心服务端 config server,根据前面介绍的配置读取的规则分别进行测试。

  • /label/{application}-{profile}.yml 方式测试

测试:http://localhost:7001/master/order-dev.yml
       测试:http://localhost:7001/master/order-test.yml

  • /{application}/{profile}/label 方式测试

测试:http://localhost:7001/order/dev/master
       测试:http://localhost:7001/order/test/master

注意:
          
/{application}-{profile}.yml默认访问的是master分支下的配置文件。例如访问

http://localhost:7009/order/dev  和 http://localhost:7009/order/dev/master 结果相同:

小结

       在配置服务中心服务端访问远程仓储的配置文件例如http://localhost:7009/order/dev/master时, 配置服务中心服务端会自动的进行拉取远程仓储到本地,例如:C:/Users/HP/AppData/Local/Temp/config-repo-xxxx/ 目录中。

3、搭建统一配置服务中心客户端

3.1 创建项目,引入依赖

搭建统一配置服务中心客户端 config client,创建订单服务项目,引入 统一服务配置中心 spring-cloud-starter-config 依赖。就等于开启了 统一配置服务中心的客户端。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloudbase</artifactId><groupId>com.hwadee.springcloud2022</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.hwadee.springcloud</groupId><artifactId>orderServer9000</artifactId><dependencies><!-- 统一配置服务中心客户端依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><!--动态健康监控 可以用于动态感知配置变化--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--web依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 管理公共api --><dependency><groupId>com.hwadee.springcloud</groupId><artifactId>springcloud-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!--Eureka Client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- 方便创建类的gettter setter --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies></project>

3.2 订单服务配置

  • 远程仓储创建订单服务配置

在远程仓储 master 分支上对订单服务的进行配置,环境分别是dev/test/prod。文件名分别为order-dev.yml、 order-test.yml、 order-prod.yml,订单服务的端口号分别为:9000、9100、9200,配置分别如下:。

  • 本地创建订单服务配置

订单服务客户端在启动的时候需要加载配置文件,但此时配置文件不在本地,而是在远程仓储上面,此时运行会报错。因此在运行的时候需要一个本地配置文件bootstrap.yml/properties,在bootstrap.yml/properties 中告知客户端配置文件需要从config Server 服务端上获取。使用配置文件bootstrap原因在于微服务启动时候 bootstrap 配置文件加载顺序优先级最高。

在 bootstrap.yml/properties 中获取 config Server 服务端上的配置文件的配置方式有两种方式,硬编码方式和服务名方式。

       硬编码方式(不推荐):

硬编码方式,即将 config Server 服务端 的地址硬编码在bootstrap中。但是不推荐使用,因为 config Server 服务端 也是集群模式,如果其中硬编码的服务挂掉,则会导致其他服务失败。配置方式如下:

spring:cloud:config:label: master # 指定分支name: order # 指定应用名称profile: dev # 指定激活环境uri: http://localhost:7009 #硬编码 指定访问 config server 远程仓储的地址的ip和端口

       服务名方式:

使用 config Server 服务端 的服务名方式。因为 config Server 服务端 也是集群模式,使用服务名,订单服务 会先到注册中心找到 config Server 服务端 该服务名的地址,然后在这些地址中在选择一个地址,进行远端的配置文件信息获取。但注册中心的配置信息需要写在 bootstrap中,而不是配置在远程仓储中。

注册中心信息修改为:

bootstrap.yml配置信息修改为:

spring:cloud:config:discovery:service-id: CONFIG-SERVICE  #告诉当前客户端 统一配置中心的服务端服务idenabled: true #开启客户端,根据服务id到注册中心获取配置信息label: master # 指定分支name: order # 指定应用名称profile: dev # 指定激活环境# 配置eureka客户端信息
eureka:client:service-url:defaultZone: http://localhost:8000/eureka/

3.3 创建订单服务controller

import com.hwadee.springcloud.entity.Product;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/order")
public class OrderController {@Value("${env}")private String env;@Value("${port}")private String port;@Value("${info}")private String info;@RequestMapping(value = "/getConfig")public Product getConfigInfo() {Product product = new Product();product.setName(env +"环境 端口:"+ port +" "+ info);return product;}}

3.4 创建启动类

创建启动类,在启动类中加入注解 @EnableEurekaClient 将来注入到服务中心。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient// 启动 eureka 客户端
public class OrderServerApplication {public static void main(String[] args) {SpringApplication.run(OrderServerApplication.class, args);}
}

3.5 启动测试

启动 注册中心 、 配置管理中心服务端、订单服务。分别对硬编码和服务名方式测试。

  • 配置文件硬编码方式测试:

重新启动订单服务,输入地址 http://localhost:9000/order/getConfig  查看结果

  • 配置文件服务名方式测试:

重新启动订单服务,输入地址 http://localhost:9000/order/getConfig  查看结果

第十一章:GetAway服务网关详解

第十三章:Spring Cloud Config 统一配置中心详解-客户端动态刷新

第十二章 Spring Cloud Config 统一配置中心详解相关推荐

  1. Spring Cloud Config的配置中心获取不到最新配置信息的问题

    本篇源于Spring Cloud Config的一个问题,但这个问题并非所有人都会遇到.如果您遇到了,那必须得看看这篇,如果没有遇到您也应该看看,防患于未然! 问题描述 之前有朋友提出Spring C ...

  2. springcloud-spring cloud config统一配置中心

    统一配置中心 为什么需要统一配置中心? 统一配置中心顾名思义,就是将配置统一管理,配置统一管理的好处是在日后大规模集群部署服务应用时相同的服务配置一致,日后再修改配置只需要统一修改全部同步,不需要一个 ...

  3. Spring cloud config 分布式配置中心(一) 服务端

    作用: 为分布式系统中的基础设施和微服务应用提供外部集中化的配置支持,分客户端和服务端 服务端: 即分布式配置中心,是一个独立的微服务应用,连接配置仓库,为客户端提供一些访问接口,如加密 / 解密信息 ...

  4. Android群英传读书笔记——第十二章:Android 5.X新特性详解

    第十二章目录 12.1 Android5.X UI设计初步 12.1.1 材料的形态模拟 12.1.2 更加真实的动画 12.1.3 大色块的使用 12.2 Material Design主题 12. ...

  5. Spring Cloud Config统一管理微服务配置

    一Spring Cloud Config背景及简介 # 集中管理的需求:一个使用微服务架构的应用系统可能会包括成百上千个微服务,因此集中管理很有必要 # 不同环境不同配置:例如数据源在不同的环境(开发 ...

  6. python自助电影售票机_Spring Cloud版——电影售票系统六使用 Spring Cloud Config 统一管理微服务配置...

    一. 为什么要统一管理微服务配置 在传统的单体应用,常使用配置文件管理所有配置.比如,一个 Spring Boot 开发的单体应用,可将配置内容放在 application.yml 文件中.如果需要切 ...

  7. spring cloud config将配置存储在数据库中

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓库, ...

  8. spring cloud config将配置存储在数据库中 1

    转载请标明出处: https://blog.csdn.net/forezp/... 本文出自方志朋的博客 Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓 ...

  9. spring cloud服务发现组件Eureka详解

    Eureka是Netflix开发的服务发现组件,本身是一个基于REST的服务.Spring Cloud将它集成在其子项目spring-cloud-netflix中,以实现Spring Cloud的服务 ...

最新文章

  1. C#中类的继承 override virtual new的作用以及代码分析
  2. 支付宝现使用故障 官方:不影响用户资金和信息安全
  3. List集合、常用数据结构基本了解
  4. 互联网医院 2020年突出成就_资讯丨2020中国医院互联网影响力排行榜
  5. Linux系统VIM编辑器管理(2)
  6. [linux][nginx] 常用2
  7. sip协议的功能及其应用
  8. 我是WPF菜鸟之(4)---关于XAML与逻辑代码
  9. JAVA遇上HTML-----JSP 篇基本概念
  10. php5.0手册,tp5.0 开发手册下载|
  11. 如何进行宽带测速,教程来啦!怎样在电脑上对宽带进行测速?
  12. HR:这样的简历我只看了5秒就扔了,软件测试简历模板想要的进。
  13. c++ gdal 矢量转栅格_gdal的矢量栅格化接口GDALRasterizeLayers使用(一)
  14. 电脑进不了,电脑进不了系统,小编教你怎么解决电脑进不了系统
  15. 【Flutter小记3】Android打开前置或广角摄像头的同时打开闪光灯方案
  16. luogu1725 琪露诺
  17. JAVA课程设计——医院挂号系统
  18. barcode.jar处理条形码
  19. mac 壁纸 android,可以用于任何设备的Android 12壁纸现在已可下载
  20. 什 么 是 可 重 入 性 , 为 什 么 说 Synchronized 是 可 重 入 锁 ?

热门文章

  1. NXP+FSL=400亿市值,真的现实么?
  2. 什么是窄带物联网(NB-IoT)?
  3. 心电信号越界怎么回事_心电图机常见故障
  4. RLilib 训练API
  5. EXCEL规范数据输入教程-验证身份证号
  6. i 智慧 | “三级火箭”战略背后:联想携手云之鼎 正式进军云数据中心主航道...
  7. 数据科普:定价模型与平价关系式(投资必知必会)
  8. 《小说朗读器》新增功能
  9. 为知笔记插件朗读器关不了怎么办?/怎么才能关闭为知笔记的朗读器插件
  10. 我的二维码上有新垣结衣老婆哦:)