《Spring Cloud微服务架构实战》--集群配置

《Spring Cloud微服务架构实战》-- 集群配置

本章要点

  • Spring Cloud Config 介绍
  • 构建配置中心的例子
  • Spring Cloud Config 的配置
  • 整合使用

 

  从前面章节的讲解我们可以知道,基本上每个微服务都是使用application.properties (yml)进行配置的。在实际应用时,集群中会存在多个服务,每个服务都可能部署多个实 例,

项目开始运营后,

如何对集群的配置进行管理?

如何实现修改配置而不用重启服务?

   这些问题都影响着集群的稳定。假如集群的服务节点配置混乱、修改常规配置还需要重启 服务,这将直接增加运维人员的工作量,也给服务集群的稳定性带来了潜在的威胁。

Spring Cloud己经为这些问题提供了解决方案:

Spring Cloud Config,本章将以Spring Cloud Config为基础,讲述微服务集群中的配置。

 

9.1 概述

 先了解 Spring Cloud Config 项目以及搭建环境。

9.1.1 关于 Spring Cloud Config

Spring Cloud Config为分布式系统提供了配置服务器(简称服务器)和配置客户端(简 称客户端),通过对它们的配置,可以很好地管理集群中的配置文件。

在实际应用时,我们 会将配置文件存放到外部系统(例如Git、SVN等),Spring Cloud Config的服务器与客户 端会到这些外部系统中读取、使用这些配置。

配置服务器主要有以下功能:

  • >提供访问配置的服务接口。
  • >对属性进行加密和解密。
  • >可以简单地嵌入Spring Boot的应用中。

配置客户端主要有以下功能:

  • >绑定配置服务器,使用远程的属性来初始化Spring容器。
  • >对属性进行加密和解密。
  • >属性改变时,可以对它们进行重新加载。
  • >提供了与配置相关的几个管理端点。
  • >在初始化引导程序的上下文时,进行绑定配置服务器和属性解密等工作,当然,也 可以实现其他工作。

 

Spring Cloud的程序可以通过简单地加入依赖,让其成为一个配置客户端,换言之,集 群中的各个节点,理论上都可以成为客户端

9.1.2应用结构

 前面提到了 Spring Cloud Config的配置服务器与配置客户端,在此,先以图形的方式 展示一下它们的结构,请见图:

 

 

 

如图所示,使用Git、SVN等版本的管理系统用于存放配置文件,服务器会到版本 管理系统中获取配置,集群中的各个客户端(服务实例)再到服务器中获取配置

 

9.1.3引导程序简介

 

Spring Cloud的程序在进行容器初始化时会先建立一个“引导上下文”(Bootstrap Context),再创建主应用的上下文。我们的主应用程序上下文通常读取的是application.yml (或.properties)文件,而引导上下文则会读取bootstrap.yml (或.properties)文件。

因为 application.yml的配置会在bootstrap.yml后加载,所以如果两份配置文件同时存在,且存在 key相同的配置,则application.yml的配置会覆盖bootstrap.yml的配置。

配置客户端(Config Client)的引导程序在进行引导上下文创建时,会去读取外部的属 性,并且会进行属性解密等工作。在此,大家对引导程序有以下两个认识即可:

  • 引导上下文会在主应用上下文前创建,是主应用上下文的父上下文。
  • 默认情况下,配置客户端的引导上下文在创建时会读取远程配置(去配置服务器中读取)。

 

9.1.4 搭建SVN环境

 

9.2 建第一个例子

9.2.1创建服务器

 新建名称为spring-config-server的Maven项目加入以下依赖:

<dependency>
  <groupld>org.springframework.cloud</groupld>
  <artifactld>spring-cloud-config-server</artifactld>
</dependency>
<dependency>
  <groupld>org.tmatesoft.svnkit</groupld>
  <artifactld>svnkit</artifactld>
  <version>l.9.0</version>
</dependency>

  

由于配置服务器需要连接到SVN,因此要加入SVN的依赖。新建启动类,使用 @EnableConfigServer注解开启配置服务器的功能,请见代码

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

  

 

 

 

9.2.2 配置SVN仓库

 

server:
  port: 8888
management:
  security:
    enabled: false
spring:
  profiles:
    active: subversion
cloud:
  config:
    server:
      svn:
        uri: https://localhost/svn/test-project
        username: admin
        password: 123456 
        default-label: default-config

  

配置服务的端口为8888,默认情况下,很多端点需要认证才能访问,配置management. security.enabled=false关闭认证。为了能让配置服务器连上SVN,需要先使用名称为 subversion的配置。spring-cloud-config-server项目提供了 4种配置,可以通过设置不同的名 字来激活。

> git:默认值,表示去Git仓库读取配置文件。

> subversion:表示去SVN仓库读取配置文件。

> native:将去本地的文件系统中读取配置文件。

> vault:去Vault中读取配置文件,Vault是一款资源控制工具,可对资源实现安全访 问。

 

为spring.profiles.active配置以上4个值,可让配置服务器访问不同的仓库。在以上的 配置中,指定了 SVN仓库为test・project,默认情况下,将会到test-project/trunk下获取配置 文件

 

 

9.2.3创建客户端

 

9.2.4从客户端读取SVN配置

 

9.2.5目录配置总结

9.2.6刷新配置

 

9.2.7 刷新 Bean

 

9.3配置的加密和解密

 

9.3.1为服务器安装JCE

9.3.2加密和解密端点

 

9.3.3 SVN存储加密数据

 

9.3.4非对称加密

9.4其他配置

9.4.1服务器健康指示器

9.4.2客户端的错误提前与重试机制

9.4.3安全配置

 

9.4.4访问服务器配置

 

 

 

9.5整合使用

9.5.1 准备工作

9.5.2配置服务器、客户端整合Eureka

 

9.5.3 整合 Zuul

9.5.4 整合 Spring Cloud Bus 刷新配置

 

9.5.5刷新单个节点配置

9.6本章小结

 

本章主要以Spring Cloud Config为基础,讲述了如何搭建微服务的配置中心。在本章 开头,先构建了一个基本的例子向大家展示了 Spring Cloud Config最主要的几个功能,

如SVN仓库配置、远程文件读取、配置刷新等内容。学习完9.2节后,读者基本上可以上 手使用Spring Cloud Configo在9.3节,讲解了如何对配置进行加密和解密,9.4节讲解了 一些常用配置。

 

在本章的9.5节,主要涉及Spring Cloud Config与其他框架的整合使用,包括与Zuul 整合实现动态路由的功能,与Spring Cloud Bus整合实现集群的配置刷新功能。

掌握这些 重要的功能,对提升集群的稳定性、减少集群的维护工作量,都有非常重要的意义。

 

 

 

 

posted @ 2022-05-22 23:23  IT6889  阅读(358)  评论(0编辑  收藏  举报