欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringCloud学习笔记(五)——Spring Cloud Config

程序员文章站 2022-07-03 18:13:27
...

配置中心的作用

  1. 最重要的是可以动态调整配置参数,更改配置不停服务。
  2. 微服务数量比较多的时候,便于集中管理。
  3. 可以管理不同环境的配置。

配置中心介绍

分布式配置中心包括3个部分:

  1. 配置文件存储仓库:如git,svn等。
  2. config server。从仓库中拉取配置文件。
  3. config client。微服务作为客户端从config server拉取配置信息。
    ![配置中心SpringCloud学习笔记(五)——Spring Cloud Config

配置中心搭建

配置文件仓库

基于GitHub创建配置文件存储仓库
SpringCloud学习笔记(五)——Spring Cloud Config
上传一个provider-dev.properties文件到仓库中。文件内容如下:

config.info=this is config info from config center.

文件命名规则

/{label}/{name}-{profiles}.properties
/{label}/{name}-{profiles}.yml
/{label}/{name}-{profiles}.json

lable:仓库分支、默认master分支
name:服务名称
profile:环境名称,开发、测试、生产:dev it pro

匹配原则:根据微服务的服务名自动查找对应name的文件列表,然后根据profiles拉取文件。

配置中心服务器

新建配置中心工程,并在pom中添加如下依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- 作为Eureka客户端存在 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.properties中添加如下配置:

#配置文件仓库地址
spring.cloud.config.server.git.uri=https://github.com/piziniao/config-center.git
#配置文件分支
spring.cloud.config.label=master
#Eureka服务器地址
eureka.client.service-url.defaultZone=http://xxx.xxx.xxx.xxx:port/eureka/
#向Eureka注册的应用名
spring.application.name=config-center
#服务端口
server.port=6001

启动类中添加配置中心服务器声明:

@EnableConfigServer

微服务端配置

为了在微服务启动时就可以加载到配置中心存储的配置文件,需要把application.properties的文件名修改为bootstrap.properties,这样才能提高加载顺序。
然后在bootstrap.properties中添加如下配置:

#直接URL方式查找配置中心
#spring.cloud.config.uri=http://xxx.xxx.xxx.xxx:6001/

#通过注册中心查找,推荐这种方式,尤其是生产环境,可以多台配置中心,降低宕机风险
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=config-center

#配置文件分支
spring.cloud.config.label=master
#环境名:dev,it,st,pro
spring.cloud.config.profile=dev

在pom中添加客户端配置依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-config-client</artifactId>
</dependency>

在服务类(Controller/Service)中添加以下声明:

@RefreshScope

在服务中使用拉取到的配置参数:

    @Value("${config.info}")
	String info;

手动刷新配置

  1. 开启actuator中的refresh端点
  2. Controller中添加@RefreshScope注解
  3. 向微服务端 url http://xxx.xxx.xxx.xxx:port/actuator/refresh发送Post请求

自动刷新配置

erlang安装
http://www.erlang.org/downloads

环境变量:
path中添加 %ERLANG_HOME%\bin

RabbitMQ安装
http://www.rabbitmq.com/install-windows.html

#开启RabbitMQ节点
cmd> rabbitmqctl start_app

#开启RabbitMQ管理模块的插件,并配置到RabbitMQ节点上
cmd> rabbitmq-plugins enable rabbitmq_management

RabbitMQ管理界面
用户名密码均为guest

http://localhost:15672

微服务端pom中添加依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

微服务端bootstrap.properties中添加:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

测试
通过url http://xxx.xxx.xxx.xxx:port/actuator/bus-refresh发送Post请求,刷新全部服务配置。
这里的url可以是某个服务端点,也可以是配置中心的url。