Git配置管理---Bus总线实现热加载服务
<p>这里以Providers中的微服务Pro-RoleSvr项目为例,进行代码修改:</p>
<h3>1、pom.xml中加入如下内容:</h3>
<pre><code>1 <!--拉取配置-->
2 <dependency>
3 <groupId>org.springframework.cloud</groupId>
4 <artifactId>spring-cloud-starter-config</artifactId>
5 </dependency>
6 <!--消息总线-->
7 <dependency>
8 <groupId>org.springframework.cloud</groupId>
9 <artifactId>spring-cloud-starter-bus-amqp</artifactId>
10 </dependency>
11 <dependency>
12 <groupId>org.springframework.amqp</groupId>
13 <artifactId>spring-rabbit</artifactId>
14 </dependency>
15 <dependency>
16 <groupId>org.springframework.boot</groupId>
17 <artifactId>spring-boot-starter-actuator</artifactId>
18 </dependency>
19
20 <!-- 重试功能依赖 -->
21 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->
22 <dependency>
23 <groupId>org.springframework.boot</groupId>
24 <artifactId>spring-boot-starter-aop</artifactId>
25 </dependency>
26 <!-- https://mvnrepository.com/artifact/org.springframework.retry/spring-retry -->
27 <dependency>
28 <groupId>org.springframework.retry</groupId>
29 <artifactId>spring-retry</artifactId>
30 </dependency></code></pre>
<h2>2、将原来的application.properties文件改成bootstrap.properties,具体配置如下:</h2>
<pre><code> 1 server.port=60018
2 spring.application.name=Pro-RoleSvr
3
4 # 远程仓库的分支
5 spring.cloud.config.label=master
6 #github上的文件名
7 spring.cloud.config.name=application-pro-role
8 # dev 开发环境配置文件 | test 测试环境 | pro 正式环境
9 # 和git里的文件名对应
10 #spring.cloud.config.profile=dev
11 spring.cloud.config.profile=uat
12 # 指明配置服务中心的网址
13 spring.cloud.config.uri= http://192.168.1.35:8886/
14 # true: 如果访问配置中心失败,则停止启动服务
15 spring.cloud.config.fail-fast=true
16 # 配置重试,默认是重试6次,最初是延迟1s再次重试,如果再失败,则延迟1.1*1s、1.1*1.1*1s、… 。可以使用这个配置
17 # 第一次失败,延迟多久重试
18 spring.cloud.config.retry.initial-interval=2000
19 # 最多重试次数
20 spring.cloud.config.retry.max-attempts=6
21 # 最大重试间隔
22 spring.cloud.config.retry.max-interval=4000
23 # 每次重试时间是之前的倍数
24 spring.cloud.config.retry.multiplier=1.2
25 # 开启消息跟踪
26 spring.cloud.bus.trace.enabled=true
27 #动态刷新配置 ---需要忽略权限拦截
28 #开启监控端点
29 management.endpoints.web.exposure.include=*</code></pre>
<p>在浏览器访问之前的注册中心当发现服务注册成功,说明拉取远程配置仓库中的配置成功!
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/1f08c176002aa5d72d56c83a2e585f8f?showdoc=.jpg" alt="" /></p>
<p>但是这里只能说是解决的80%的问题,最大的作用还没有展示出来,下面介绍一下如何通过bus总线和RabbitMQ来完成动态加载最新的配置:
首先我们找到Pro-RoleSvr进行测试,在浏览器页面输入访问http://192.168.1.38:60014/RoleService/findRoleByName?roleName=admin 当你看到如下内容,说明前面的配置已经成功!
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/2de9ea718e0df7780eb6fac606b287e1?showdoc=.jpg" alt="" />
在实现配置的热加载,需要和bus总线搭配一起使用,实验:在GitHub仓库找到需要修改的配置文件application-pro-role-uat.properties
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/8fab07c2f869dd7939b864afef1dde39?showdoc=.jpg" alt="" />
这里我是将root改成root1
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/6d5a7eef6df70e3da34966687dac58bc?showdoc=.jpg" alt="" />
改完之后,一定要记住提交,同时通过Postman发送一个POST请求:<a href="http://192.168.1.35:8886/actuator/bus-refresh">http://192.168.1.35:8886/actuator/bus-refresh</a>
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/bb4c5c51058b806936d26586f1c34345?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/108e0377dbacffc0bd278b9c4378ca80?showdoc=.jpg" alt="" />
发送完POST请求,回到浏览器我们再次访问:<a href="http://192.168.1.38:60014/RoleService/findRoleByName?roleName=admin">http://192.168.1.38:60014/RoleService/findRoleByName?roleName=admin</a>
会看到如下报错内容:
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/2d92afab34e2caf84c554413984cb654?showdoc=.jpg" alt="" />
这时我们再次将数据库的用户名root1改成原来的root ,提交修改,发送POST请求,看到返回空白,RabbitMq会有变化,再回到浏览器,再次刷新报错的页面:<a href="http://192.168.1.38:60014/RoleService/findRoleByName?roleName=admin">http://192.168.1.38:60014/RoleService/findRoleByName?roleName=admin</a> 会发现原来报错的页面又重新可以访问,并返回数据,如下图:
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/2c8b71c03c47543b4ffd90412fe206d5?showdoc=.jpg" alt="" />
这样就通过Spring Cloud Bus+Spring Cloud Config,实现了热加载配置的效果!</p>
<h2>总结Spring Cloud Bus做配置更新的步骤:</h2>
<p>1.提交代码,发送POST请求给actuator/bus-refresh
2.server端接收到请求,并发送给Spring Cloud Bus
3.Spring Cloud Bus接收到消息并通知给其他客户端
4.其他客户端接收到通知,请求server端获取最新的配置
5.全部客户端都获取到最新的配置。</p>