最近看《深入理解Spring Cloud微服务构建》是一书之中,发现作者使用的springboot是1.x.版本之中,书中的代码示例在2.x的版本之中,有一点区别,在此读者总结一下,实现2.0之后,用spring cloud bus 自动刷新配置
首先说一下笔者用到的版本springBoot 2.1.4 ,springcloud 版本 Greenwich ,首先看下笔者的demo目录结构
eureka 为注册中心 目的是为了搭建一个高可用的配置中心config ,config-client和config-server 分别向eureka里面去注册服务,config-client通过向eureka 读取到config-server的配置文件,而config-server配置文件实际内容存入了gitee仓库。
注意一下 pom.xml依赖仅仅是贴出来了相关重要依赖, web依赖请自行加入
这里 总线采用是 rabbitMQ做为总线代理,需要首先开启rabbitMQ 如果不会安装和配置rabbitMQ
请拜访官网 https://www.rabbitmq.com
eureka-server 在pom.xml文件 只需要引入 netflix-eureka-server的相关依赖,springBoot 以上的2.x依赖和spring1.x 一点点区别,主要加入了netflix (一个公司,springcloud 很好的结合的该公司的旗下用的很多组件)
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
在该项目的resource下面新建application.yml文件
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
#关闭表示 eureka不向自己注册自己,也不注册到别的eureka里面,在eureka集群下面要设置true 默认是true
register-with-eureka: false
fetch-registry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
在启动类上面加上 @EnableEurekaServer 注解 开启eurekaServer服务
该模块是配置中心服务端 ,同样在pom.xml引入相关依赖,版本号缺不缺省都可
org.springframework.cloud
spring-cloud-config-server
2.1.0.RELEASE
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
2.1.0.RELEASE
同样resource下面创建application.yml文件,添加相关配置 ,这里默认把config-client的配置文件存入了gitee仓库里面,
search-paths 表示仓库下面存放的搜寻的文件夹,配置文件放入文件夹里面
server:
port: 8769
spring:
application:
name: config-server
cloud:
config:
#config-server相关配置
server:
git:
uri: https://gitee.com/NaNiZhenShiYiJiBang/cloud-config.git
search-paths: respo
username: [email protected]
password:
default-label: master
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
gitee仓库:
在启动类上面加上 @EnableConfigServer 注解 开启config服务 ,在加上 @EnableEurekaClient 开启eureka客户端服务
该模块是config客户端模块,它需要向config-server模块里面去读取相关配置
同理添加依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
2.1.0.RELEASE
org.springframework.cloud
spring-cloud-config-client
2.1.0.RELEASE
org.springframework.cloud
spring-cloud-starter-bus-amqp
2.1.0.RELEASE
org.springframework.boot
spring-boot-starter-actuator
在该模块的resource里面新建 bootstrap.yml (bootstrap.yml比application)加载优先级更高
config-client启动之时,会读取resource配置文件,在配置之中 读取config discovery 发现地址 service-id 对应eureka里面的 服务注册名,则client是在eureka里面去读取config-sever注册的服务 ,而且该模块的name 是config-client ,profiles 是dev 则配置文件的名词是 config-client-dev.yml
spring:
application:
name: config-client
cloud:
config:
fail-fast: true
discovery:
enabled: true
service-id: config-server
profiles:
active: dev
#通过消息总线更改配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
server:
port: 8080
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
#开启监控中心 springboot2.0 必要操作 * 表示监控所有信息
management:
endpoints:
web:
exposure:
include: "*"
同理在启动类加上如下注解 ,懒得打字了 ,见下图,下面这个请求接口仅仅为了测试demo使用,项目中千万别这么写
先依次开启rabbitMQ eureka-server config-server config-client 最后启动config-client之后会发现虽然配置文件设置的8080端口,但是读取到的git 配置文件里面的地址,端口是 8762
此时,在浏览器上面访问 localhost:8762/foo
说明已经加载了git仓库下面的配置文件,现在来测试spring cloud Bus 实现不用重启来刷新修改一下git配置文件里面的foo 的值
这里书中由于版本 问题,在2.X并不适用 2.x所有的都是在监控里面
http://localhost:8762/actuator/bus-refresh post请求
会发现在cosole里面输入一些信息 此时再次刷新
好了,这就实现了 项目示例代码 https://github.com/xzjayx/spring-cloud-config