写点什么

微服务网关:Spring Cloud Config- 配置中心

发布于: 2021 年 04 月 10 日
微服务网关:Spring Cloud Config-配置中心

系列文章:

微服务架构:网关概念与 zuul

微服务网关:Spring Cloud Gateway —— Zuul


一 摘要

对于一些简单的项目来说,我们一般都是直接把相关配置放在项目的配置文件中,例如.properties 或 .yml 文件,也可以直接放到 application.properties 或 application.yml。但这种方式有个明显的问题,那就是,当修改了配置之后,必须重启服务,否则配置无法生效。

所以配置中心应运而生,用于支持动态调整配置参数。常用的配置中心有 Spring Cloud Config、蚂蚁金服的 disconf、携程的 Apollo 等等,都实现了这个功能, 使用 github、数据库、svn、本地文件等作为存储。本篇将先针对 Spring Cloud Config 进行分析,了解其使用方式和运行原理。

二 Spring Cloud Config

Spring Cloud Config 提供在分布式系统中,服务端和客户端外部配置支持。Config Server 作为一个配置中心,用于管理所有环境下应用的外部属性。

2.1 版本信息

https://spring.io/projects/spring-cloud-config#learn 最新已经到了 版本,这里选择 2.2.7.RELEASE 稳定版本进行说明。


2.2 Spring Cloud Config 特性

2.2.1 服务端

  • 为外部配置(name-value 对,或同等的 YAML 内容)提供 HTTP 协议,基于资源的 API

  • 加密和解密属性值(对称或非对称)

  • 使用 @EnableConfigServer 注解,可轻松嵌入 Spring Boot 应用程序

2.2.2 客户端(Spring 应用)

  • 绑定到 Config Server,并用远程属性源初始化 Spring 环境

  • 加密和解密属性值(对称或非对称)

2.3 源码分析

官方的实例代码samples,包括Config ServerConfig ClientMinimal (Groovy) Client

2.3.1 confiserver

先看 confiserver,代码结构如下:

demo 中,只有一个 ConfigServerApplication,内容如下:

@Configuration@EnableAutoConfiguration@EnableDiscoveryClient@EnableConfigServerpublic class ConfigServerApplication {
public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); }
}
复制代码

与 zuul 网关等 spring cloud 体系的组件一样,重点还是在注解中。前两个是配置和自动装配注解,EnableDiscoveryClient 是注册中心,@EnableConfigServer 就是配置中心的注解。

2.3.2 配置文件

在 resources 下,包括三个配置和一个 keystore.jks:

  • application.yml

应用配置,常规的服务端口、端信息的 base-path,日志等级、eureka 实例、config.server 的 git 地址等等。

server:  port: 8888
management: endpoints: web: base-path: "/admin" exposure: include: "*" endpoint: env: post: enabled: truelogging: level: com.netflix.discovery: 'OFF' org.springframework.cloud: 'DEBUG' eureka: instance: leaseRenewalIntervalInSeconds: 10 statusPageUrlPath: /admin/info healthCheckUrlPath: /admin/health
spring: cloud: config: server: git: uri: https://github.com/spring-cloud-samples/config-repo basedir: target/config
---spring: profiles: cloudeureka: password: password instance: hostname: ${vcap.application.uris[0]} nonSecurePort: 80 client: serviceUrl: defaultZone: ${vcap.services.${PREFIX:}eureka.credentials.uri:http://user:${eureka.password:}@${PREFIX:}eureka.${application.domain:cfapps.io}}/eureka/

复制代码
  • bootstrap.yml

启动信息,文件内包括配置中心的 spring 应用名称(configserver)、加密信息。encrypt.keyStore 下配置了密钥文件的路径、密码及别名信息:

spring:  application:    name: configserverencrypt:  failOnError: false  keyStore:    location: classpath:keystore.jks    password: ${KEYSTORE_PASSWORD:foobar} # don't use a default in production    alias: test
复制代码
  • git.properties

git 仓库及账号信息,包括配置内容所在的 git 地址、使用分支、账号信息等等。内容如下:

git.commit.id.abbrev=b1c43eagit.commit.user.email=dsyer@gopivotal.comgit.commit.message.full=Change name\ngit.commit.id=b1c43ea8683c86a740f40c00677215cdb8d8ef79git.commit.message.short=Change namegit.commit.user.name=Dave Syergit.build.user.name=Dave Syergit.commit.id.describe=b1c43eagit.build.user.email=dsyer@gopivotal.comgit.branch=mastergit.commit.time=2014-07-27T07\:13\:02-0700git.build.time=2014-07-28T08\:32\:25-0700git.remote.origin.url=git@github.com\:spring-platform-samples/configserver.git
复制代码

三 启动方式

两种方式:

1)进入 configserver 工程目录,执行命令: ./mvnw spring-boot:run ,在下载完依赖之后,即可执行启动;

2)工程导入 ide,如 idea,直接 run ConfigServerApplication。启动后,通过 http://localhost:8888/admin 即可访问,输出内容如下:


发布于: 2021 年 04 月 10 日阅读数: 51
用户头像

磨炼中成长,痛苦中前行 2017.10.22 加入

微信公众号【程序员架构进阶】。多年项目实践,架构设计经验。曲折中向前,分享经验和教训

评论

发布
暂无评论
微服务网关:Spring Cloud Config-配置中心