Spring Cloud完整组件搭建之路 第五篇 -Spring Cloud Config
- SpringCloud配置系列目录:
- 前置知识
- 配置中心包括3个部分
- 创建存放配置文件信息的git仓库
- git文件命名规范
- 创建新的Spring Cloud Config工程
- 引入相关依赖
- 新建并编辑application.yml配置文件
- 创建application.yml文件
- 编辑application.yml文件
- 实现自动刷新
- erlang安装
- 配置erlang环境变量
- RabbitMQ安装
- 启动RabbitMQ
- 进入RabbitMQ管理界面
- 在新建工程的配置文件application.yml添加内容
- 在新建工程的添加启动类相关注解
- Config Client(USER-PROVIDER组的微服务)配置
- 修改Controller方法
- 添加配置文件内容
- 修改配置文件名称
- 添加相关依赖
- Spring Cloud Config启动测试
- Spring Cloud Config注册成功
- 查看当前git仓库中文件内容
- 查看当前访问请求打印信息
- 修改git文件信息并提交
- 查看CONFIG-SERVER服务的actuator监控信息
- 更新USER-PROVIDER中的配置信息为git中最新的内容
- 打开Postman并发送post请求
- 查看当前访问请求打印信息
书接上回【Spring Cloud完整组件搭建之路 第四篇 -Zuul】,我们搭建的微服务组件有了Eureka、OpenFeign、Ribbon、Hystrix、Zuul,并且一共已经有了六个服务,现在,有一个问题,如果我想把我微服务中所有USER-CONSUMER和USER-PROVIDER组的微服务的配置文件修改一个共同的内容,我该怎么办?一个个修改yml,并且一个个重启服务?我们现在USER-CONSUMER和USER-PROVIDER组的微服务一共就三个,操作也不麻烦,但如果一共10个呢?20个呢?
所以,我们需要一个能修改指定的所有微服务配置文件的组件,这样,我们就引入了Spring Cloud Config,接下来我们一起配置一下。
SpringCloud配置系列目录:
【Spring Cloud完整组件搭建之路 第一篇-Eureka】
【Spring Cloud完整组件搭建之路 第二篇 -OpenFeign、Ribbon整合】
【Spring Cloud完整组件搭建之路 第三篇 -OpenFeign、Hystrix整合】
【Spring Cloud完整组件搭建之路 第四篇 -Zuul】
【Spring Cloud完整组件搭建之路 第五篇 -Spring Cloud Config】
【Spring Cloud完整组件搭建之路 总结篇】
前置知识
配置中心包括3个部分
- 存放配置的地方:git 等。
- config server。从 1 读取配置。
- config client。是 config server 的客户端 消费配置,也就是要修改配置文件的微服务。
创建存放配置文件信息的git仓库
就是普通创建git仓库的步骤
git文件命名规范
获取配置规则:根据前缀匹配
/{name}-{profiles}.properties
/{name}-{profiles}.yml
/{name}-{profiles}.json
/{label}/{name}-{profiles}.yml
name 服务名称
profile 环境名称,开发、测试、生产:dev qa prd
lable 仓库分支、默认master分支
我创建的文件名是user-provider-dev.yml
,代表user-provider服务下的dev环境
匹配原则:从前缀开始。
创建新的Spring Cloud Config工程
根据【Spring Cloud完整组件搭建之路-Eureka】博客中的创建工程的步骤,选择Eureka Discovery Client、Config Server依赖创建完成。
引入相关依赖
<!--引入actuator依赖,用于开启当前工程的监控功能-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 配置bus-amqp所需依赖,用于添加actuator的busrefresh信息,用于提供统一消息服务 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
<version>3.1.0</version>
</dependency>
新建并编辑application.yml配置文件
创建application.yml文件
在src/mian/resource目录下创建application.yml文件即可。
编辑application.yml文件
server:
port: 8888
# 打开actuator所有监控参数
management:
endpoints:
web:
exposure:
include: '*'
# 配置git信息
spring:
cloud:
config:
server:
git:
uri: https://gitee/hepai123/spring-cloud-config-center.git
username: 账号
password: 密码
# git分支
label: dev
application:
name: CONFIG-SERVER
# 连接eureka服务器
eureka:
client:
serviceUrl:
defaultZone: http://euk-server-two:7000/eureka/
实现自动刷新
上面的依赖中可以看到我们引入了bus-amqp,这个是用来统一通知所有config-client来进行指定操作的,包括全部刷新本服务的配置文件信息的指令,但是amqp的底层是一个消息队列MQ,直接有这个amqp功能,也就是能和amqp无缝整合的消息中间件有Kafka和RabbitMQ,RabbitMQ面向应用级开发,Kafka则是用于大的数据文件中转开发,所以我们集成RabbitMQ就可以了,所以我们需要进行如下操作:
erlang安装
http://www.erlang/downloads
配置erlang环境变量
path中添加 %ERLANG_HOME%\bin
RabbitMQ安装
http://www.rabbitmq/install-windows.html
启动RabbitMQ
在安装目录的bin目录下cmd,按顺序执行以下内容:
# 开启RabbitMQ节点
rabbitmqctl start_app
# 开启RabbitMQ管理模块的插件,并配置到RabbitMQ节点上
rabbitmq-plugins enable rabbitmq_management
进入RabbitMQ管理界面
访问地址:http://localhost:15672
用户名密码均为guest
在新建工程的配置文件application.yml添加内容
spring:
# 配置rabbitmq信息
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
在新建工程的添加启动类相关注解
@EnableEurekaClient
@EnableConfigServer
Config Client(USER-PROVIDER组的微服务)配置
修改Controller方法
在博客【Spring Cloud完整组件搭建之路 第二篇 -OpenFeign、Ribbon整合】中,我们创建了UserProviderController测试接口类,我们将其进行修改,修改后代码如下:
import org.apache.commons.lang.builder.ToStringBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RefreshScope
public class UserProviderController {
@Value("${server.port}")
private String port;
@Value("${hepai.say}")
private String say;
/**
* 用于为consumer提供feign带参的get访问
* @param id
* @return
*/
@RequestMapping(value = "/aliveGet",method = RequestMethod.GET)
public String aliveGet(@RequestParam("id") Integer id){
return id + "---"+ port + "aliveGet";
}
/**
* 用于为consumer提供feign带参的get访问
* @return
*/
@RequestMapping(value = "/noParamGet",method = RequestMethod.GET)
public String noParamGet(){
return port + "aliveGet:" + say;
}
/**
* 用于为consumer提供feign带参的post访问
* @param map
* @return
*/
@RequestMapping(value = "/alivePost",method = RequestMethod.POST)
public String alivePost(@RequestBody Map<String,Object> map){
return ToStringBuilder.reflectionToString(map) + "---"+ port + "alivePost";
}
/**
* 用于为consumer提供feign带参的post访问
* @param map
* @return
*/
@RequestMapping(value = "/alivePostParam",method = RequestMethod.POST)
public String alivePostParam(@RequestParam Map<String,Object> map){
return ToStringBuilder.reflectionToString(map) + "---"+ port + "alivePostParam";
}
}
代码修改点:
- 添加
@RefreshScope
注解- 添加对
${hepai.say}
配置信息的引入- 对
noParamGet
方法的修改,打印最新say信息
添加配置文件内容
注意spring.cloud.config.profile是git文件名的最后一个杠(-)后面的内容
注意spring.cloud.config.label是要更新的git文件所在的git分支
注意spring.cloud.config.discovery.service-id是配置中心的服务名称
spring:
# 使用git仓库中dev结尾的文件,并配置config服务器
cloud:
config:
profile: dev
label: dev
# 可在eureka自动找寻config服务端
discovery:
enabled: true
service-id: CONFIG-SERVER
# 配置rabbitmq信息
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
management:
endpoints:
# 开启Actuator监控eureka服务所有信息,不加此配置只打开health和info
web:
exposure:
include: '*'
修改配置文件名称
由
application.yml
修改为bootstrap.yml
添加相关依赖
<!-- 使用bootstrap.yml启动所需依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.0</version>
</dependency>
<!-- 配置bus-amqp所需依赖,用于添加actuator的busrefresh信息,可实现自动刷新 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
<version>3.1.0</version>
</dependency>
<!-- config-client所需依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Spring Cloud Config启动测试
Spring Cloud Config注册成功
查看当前git仓库中文件内容
查看当前访问请求打印信息
修改git文件信息并提交
查看CONFIG-SERVER服务的actuator监控信息
这个busrefresh就是我们要用到的自动刷新的核心方法。
现在这个时候我们的访问请求打印信息依然没有变,还是原先的内容
更新USER-PROVIDER中的配置信息为git中最新的内容
打开Postman并发送post请求
请求地址:http://config-serverIP:端口号/actuator/busrefresh
查看当前访问请求打印信息
最终,在没有重启服务的情况下,配置信息更新成功。
更多推荐
Spring Cloud完整组件搭建之路 第五篇 -Spring Cloud Config
发布评论