spring cloud学习笔记(6)--spring cloud config

config配置中心介绍

为什么需要配置中心?
1、集中管理配置
2、不同环境不同配置
3、运行期间动态调整配置
4、自动刷新
Spring Cloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括Config Server和Config Client两部分Config Server是一个可横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置内容(也可使用Subversion、本地文件系统或Vault存储配置),因此可以方便的实现对配置的版本控制与内容审计。Config Client 是Config Server的客户端,用于操作存储在Config Server中的配置属性。

使用config实现配置中心服务端及客户端

首先新增git配置仓库中心,地址为:https://gitee.com/cymdengdai/spring-cloud-config-test.git
在仓库里增加如下配置文件:

编写config配置中心服务端(使用git仓库存储)

1.添加依赖,并在启动类上增加注解@EnableConfigServer

 在启动类上增加注解@EnableConfigServer

配置文件application.yml如下:

启动项目,访问地址:http://localhost:8080/ms-config/dev,得到整个项目的配置信息,这样子config的服务端就配置成功了。

配置文件映射规则如下:

以上端点都可以映射到{application}-{profile}.properties这个配置文件,{application}表示微服务的名称,{label}对应Git仓库的分支,默认是 master

如:http://localhost:8080/ms-config/test 中的ms-config对应着git仓库中ms-config-test.properties中的ms-config

编写config配置中心客户端

添加依赖

除了默认的application.yml配置文件,还需增加一个bootstrap.yml的配置文件,内容如下:

spring cloud有一个“引导上下文"的概念,这是主应用程序的父上下文。引导上下文负责从配置服务器加载配置属性,以及解密外部配置文件中的属性。和主应用程序加载application.*(yml或 properties)中的属性不同,引导上下文加载(bootstrap.*)中的属性。配置在 bootstrap.*中的属性有更高的优先级,因此默认情况下它们不能被本地配置覆盖。

启动项目,访问地址:http://localhost:8081/person/1 ,看能不能得到git仓库中配置的数据库连接从而访问数据库

http://localhost:8081/person/2

说明我们数据库连接信息可以从git远程仓库那里获取到,客户端配置成功。

config配置中心服务端配置详解

  • git地址占位符

  • 子目录查询search-path

配置信息的加解密安全处理

前文是在 Git仓库中明文存储配置属性的。很多场景下,对于某些敏感的配置内容(例如数据库账号、密码等),应当加密存储。 config server为配置内容的加密与解密提供了支持。

安装JCE

config server的加解密功能依赖Java Cryptography Extension(JCE)Java8 JCE下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html下载JCE并解压,将其中的jar包覆盖到JDK/jre/lib/security目录中

对称加密
config server提供了加密与解密的接口,分别是/encrypt与/decrypt

引入依赖:

增加一个配置文件bootstrap.yml,配置对称加密的密钥

运行项目,验证加解密
加密:curl http://localhost:8080/encrypt -d 123456 (这需要用post方式请求,get方式不支持)
解密:curl http://localhost:8080/decrypt -d  4f2b3101566738068779f2ea1eff1a5f41ed0896116425c7e09a8dae2e351aac

在git仓库增加配置文件ms-config-dev.properties,内容如下:

我们通过访问http://localhost:8080/ms-config/dev  能够得到明文

但是在config server保存的文件我们可以发现适合我们git是一样的。

说明 config server能自动解密配置内容。一些场景下,想要让 config server直接返回密文本身,而并非解密后的内容,可设置
spring.cloud.config.server.encrypt.enabled=false,这时可由 ConfigCIient自行解密。

配置信息手动刷新

很多场景下,需要在运行期间动态调整配置。如果配置发生了修改,微服务要如何实现配置的刷新呢?

添加依赖如下,其中spring-boot-starter-actuator提供了/refresh端点,用于配置的刷新(在客户端添加)

在Controller上添加注解@RefreshScope,添加这个注解的类会在配置更改时得到特殊的处理

 

1、 启动项目(启动两个,一个端口8081,一个端口8082),

访问地址:

http://localhost:8081/profile,得到结果: today study spring cloud congfig,

访问地址:
http://localhost:8082/profile,得到结果: today study spring cloud congfig

2、修改git仓库里的配置文件ms-config-dev.properties的内容为:

3、再次访问地址:http://localhost:8081/profile,得到结果还是 today study spring cloud congfig,说明配置尚未刷新
4、发送post请求:http://localhost:8081/refresh,返回结果:"profile",表示profile这个配置属性已被刷新(同样是需要post方式是请求的)注意,这里还需要把安全认证给关闭了,要不然权限访问。


5、再次访问 http://localhost:8081/profile,得到结果: today study spring cloud congfig 123456678,说明属性已刷新
6、再次访问 http://localhost:8082/profile,得到结果: dev-1.0,说明8082的服务并没有刷新,还需再次手动刷新才能更新配置

配置信息自动刷新

前文讨论了使用/refresh端点手动刷新配置,但如果所有微服务节点的配置都需要手动去刷新,工作量可想而知。不仅如此,随着系统的不断扩张,会越来越难以维护。因此,实现配置的自动刷新是很有必要的,Spring Cloud Bus就可以实现配置的自动刷新。Spring Cloud Bus使用轻量级的消息代理(例如 RabbitMQ、 Kafka等)连接分布式系统的节点,这样就可以广播传播状态的更改(例如配置的更新)或者其他的管理指令。可将Spring Cloud Bus想象成一个分布式的Spring Boot Actuator。

服务端实例

添加依赖

配置文件增加rabbitmq的配置:

server:
  port: 8080
management:
  security:
    enabled: false  #关掉安全认证
spring:
  application:
    name: microservice-config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/cymdengdai/spring-cloud-config-test.git     # 配置Git仓库的地址
          username:                                                         # Git仓库的账号
          password:                                                         # Git仓库的密码
    bus:
      trace:
        enabled: true     # 开启cloud bus的跟踪
  rabbitmq:
    host: localhost
    port: 15672
    username: guest
    password: guest


客户端示例

添加依赖

 配置文件增加rabbitmq的配置:

spring:
  application:
    name: ms-config    # 对应config server所获取的配置文件的{application}
  cloud:
    config:
      uri: http://localhost:8080/
      profile: dev            # profile对应config server所获取的配置文件中的{profile} 
      label: master           # 指定Git仓库的分支,对应config server所获取的配置文件的{label}
  rabbitmq:
    host: localhost
    port: 15672
    username: guest
    password: guest

注意我们还要启动本地的RabbitMQ的服务(在这就不说了,可以参考一下我springboot的学习,里面有安装教程)

运行项目(运行一个config server和两个config client)

消息队列中已经有了这三个微服务了,那我们修改git仓库里的配置文件,然后用post方式请求地址:http://localhost:8080/bus/refresh,如果返回成功,则config的所有客户端的配置都会动态刷新。

config的安全认证

config服务端:
添加依赖:

application.yml配置如下:

server:
  port: 8080
management:
  security:
    enabled: false  #关掉安全认证
spring:
  application:
    name: microservice-config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/cymdengdai/spring-cloud-config-test.git     # 配置Git仓库的地址
          username:                                                         # Git仓库的账号
          password:                                                         # Git仓库的密码
    bus:
      trace:
        enabled: true     # 开启cloud bus的跟踪
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

security:
  basic:
    enabled: true               # 开启基于HTTP basic的认证
  user:
    name: root                  # 配置登录的账号是user
    password: root       # 配置登录的密码是password

config客户端:
在配置文件里bootstrap.yml里增加如下配置:

启动服务端,这个时候我们想要直接访问git仓库中文件就需要先验证了。如下:

config配置中心的高可用

1、config server未注册到eureka上的情况,通过负载均衡器来实现

2、config server注册到eureka上的情况,client端也注册到eureka上,则已经实现高可用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值