微服务实战——高可用的SpringCloudConfig

管理微服务配置

对于单体应用架构来说,会使用配置文件管理我们的配置,这就是之前项目中的application.properties或application.yml。如果需要在多环境下使用,传统的做法是复制这些文件命名为application-xxx.properties,并且在启动时配置spring.profiles.active={profile}来指定环境。

在微服务架构下我们可能会有很多的微服务,所以要求的不只是在各自微服务中进行配置,我们需要将所有的配置放在统一平台上进行操作,不同的环境进行不同的配置,运行期间动态调整参数等等。总之一句话,使用集中管理配置是很有必要的。

Spring Cloud Config

  • 官方地址

  • 为分布式系统外部配置提供了服务器端和客户端的支持,它包括config server端和 config client端两部分

  • Config server端是一个可以横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认 使用Git存储配置内容

  • Config client 是config server的客户端,用于操作存储在server中的配置属性

  • 优势

    • 集中管理配置

    • 不同环境不同配置

    • 运行期间可以动态调整

    • 配置修改后可以自动更新

本章源码

源码

全部SpringCloud教程

架构图

引入spring cloud config步骤

可基于之前SpringCloudDemo项目改造,也可以创建为新的项目

一、在GitHub创建一个git仓库用来存放git配置

  • 创建仓库名字为spring-cloud-config-repo的私有仓库

  • 增加其他模块(后面config client会详细说,可先跳过)的配置文件,格式为

    {application}-{profile}.properties

    并将配置项粘贴到新建的文件中,如:创建zuul-dev.properties,并将原来的zuul模块中的application.properties全部配置粘贴进来

  • {application}-{profile}.properties,{application}表示微服务的名称,{label}表示Git对应的分支,默认为master,{profile}表示配置文件的profile
    访问时就 /{application}/{profile}[/{label}]或/{label}/{application}-{profile}.properties

二、 创建config server端

  • 创建maven项目,可在原项目中创建Module

  • 引入pom依赖

    <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-config-server</artifactId>
      </dependency>
  • 创建启动类

    package cn.kxtop.blog.configserver;
    
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
      import org.springframework.cloud.config.server.EnableConfigServer;
      // 注入到Eureka中,使高可用
      @EnableDiscoveryClient
      @SpringBootApplication
      @EnableConfigServer
      public class ConfigServerApplication {
    
          public static void main(String[] args) {
              SpringApplication.run(ConfigServerApplication.class);
          }
    
      }
  • 配置配置文件application.properties

    server.port=9999
      # 配置git仓库的地址(修改为你自己的git仓库地址)
      spring.cloud.config.server.git.uri=https://github.com/qupengkun/spring-cloud-config-repo.git
      # git仓库账号
      spring.cloud.config.server.git.username=YOU_NAME
      # git仓库秘密
      spring.cloud.config.server.git.password=YOU_PASSWORD
      #eureka,确保Spring cloud config 高可用
      eureka.client.serviceUrl.defaultZone = http://localhost:8761/eureka/
  • 启动项目并访问测试
    http请求localhost:9999/zuul/dev

三、创建config client端

  • 引入依赖

    <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-config-client</artifactId>
      </dependency>
  • 创建bootstrap.properties

    #对应之前git仓库的文件名,如zuul-dev.properties
      spring.application.name=zuul
      #config server 地址
      spring.cloud.config.uri=http://localhost:9999
      #{profile}名(环境)
      spring.cloud.config.profile=dev
      #{label}名,git仓库分支
      spring.cloud.config.label=master
  • 删除原来的application.properties,如没有,则不用操作直接下一步

  • 启动client端可见连接到了config-server端

  • 查看eureka发现已经注册到eureka中

  • 测试在线参数修改
    可在Controller上加注解 @RefreshScope 请求server:port/refresh手动刷新

总结及后续

以上基本演示了Spring Cloud Config的用法,还是比较简单的,我们引入了Eureka使Config Server能保证高可用,还可以增加@RefreshScope手动刷新配置文件,如果配置对安全要求较高,也可以引入JCE(Java Cryptography Extension)进行加解密操作。

其实每次都去手动刷新配置还是比较麻烦且有很大的局限性的,那么如何修改配置后自动感知并刷新呢?请关注下一章基于Spring Cloud Bus实现自动刷新配置。

持续学习,记录点滴。更多文章请访问 文章首发

(0)

相关推荐

  • spring cloud微服务快速教程之(二)服务注册与发现 eureka

    0.为什么需要eureka 当我们从当体系统拆分为多个独立服务项目之后,如果aaa.com/uer.aaa.com/order;:相互之间调用,如果只是一个服务一个实例,那还可以直接通过固定地址(如h ...

  • SpringCloud-常用组件介绍

    分布式系统开发用于分布式环境(多个服务器不在同一个机房,同一个业务服务在多台服务器运行) Spring Cloud 是基于Springboot的分布式云服务架构,SpringCloud的设计就是为了分 ...

  • springcloud组件技术分享(推荐)

    目录 1. 项目初始化配置 2. Eureka 3. Ribbon 4. Feign学习 5. hystrix学习 6. springboot的健康监控actuator 7. feign配合Hystr ...

  • 从代码到部署微服务实战(一)

    当前微服务已经成为服务端开发的主流架构,而Go语言因其简单易学.内置高并发.快速编译.占用内存小等特点也越来越受到开发者的青睐,微服务实战系列文章将从实战的角度和大家一起学习微服务相关的知识.本系列文 ...

  • 「从0开始学架构」05 | 复杂度来源:高可用

    今天,我们聊聊复杂度的第二个来源高可用. 参考维基百科,先来看看高可用的定义: 系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一. 这个定义的关键在于"无中断& ...

  • 搭建稳定高可用的直播平台,直播平台搭建标准化

    从最初的秀场直播开始到今天为止,整个直播的链路基本上已经实现标准化.主播在线下无论使用PC还是移动手机,都是在本地通过客户端实现采集编码,并通过推流的形式到直播中心,再经过转码等媒体处理,通过云厂商C ...

  • java 全端开源 电商系统 springboot uniapp 小程序 前后端分离 高可用

    所有jar包均可从maven中央仓库下载,无二次封装jar包,全端开源,无后门,无监控. 介绍 官网:https://pickmall.cn Lilishop 是一款Java开发,基于SpringBo ...

  • 支付系统高可用架构设计实战,可用性高达99.999!

    作者:冯忠旗 juejin.im/post/5cfde01bf265da1bba58f863 一.背景 对于互联网应用和企业大型应用而言,多数都尽可能地要求做到7*24小时不间断运行,而要做到完全不间 ...

  • 高可用DevHa实践,告诉你生产环境0性能故障是如何做到的!

    导读:近日,数列科技 CTO 陆学慧参加 ArchSummit 全球架构师峰会,并进行了题为<0 性能故障是如何做到的:高可用性能领域的 DevHA 实践>的主题演讲,详细介绍了 0 性能 ...

  • MySQL高可用架构之MHA

    MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀 ...

  • 稳定性保障6步走:高可用系统大促作战指南!

    一  前言 年年有大促,大家对于大促稳定性保障这个词都不陌生,业务场景尽管各不相同,"套路"往往殊路同归,全链路压测.容量评估.限流.紧急预案等,来来去去总少不了那么几板斧. 跳出 ...

  • 教你在 Kubernetes 上部署 Redis 高可用集群

    Redis 介绍 Redis 代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序集 ...