学习成长

提供在线文档,方便大家学习


Git配置管理---Bus总线实现热加载服务

<p>这里以Providers中的微服务Pro-RoleSvr项目为例,进行代码修改:</p> <h3>1、pom.xml中加入如下内容:</h3> <pre><code>1 &lt;!--拉取配置--&gt; 2 &lt;dependency&gt; 3 &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; 4 &lt;artifactId&gt;spring-cloud-starter-config&lt;/artifactId&gt; 5 &lt;/dependency&gt; 6 &lt;!--消息总线--&gt; 7 &lt;dependency&gt; 8 &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; 9 &lt;artifactId&gt;spring-cloud-starter-bus-amqp&lt;/artifactId&gt; 10 &lt;/dependency&gt; 11 &lt;dependency&gt; 12 &lt;groupId&gt;org.springframework.amqp&lt;/groupId&gt; 13 &lt;artifactId&gt;spring-rabbit&lt;/artifactId&gt; 14 &lt;/dependency&gt; 15 &lt;dependency&gt; 16 &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; 17 &lt;artifactId&gt;spring-boot-starter-actuator&lt;/artifactId&gt; 18 &lt;/dependency&gt; 19 20 &lt;!-- 重试功能依赖 --&gt; 21 &lt;!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop --&gt; 22 &lt;dependency&gt; 23 &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; 24 &lt;artifactId&gt;spring-boot-starter-aop&lt;/artifactId&gt; 25 &lt;/dependency&gt; 26 &lt;!-- https://mvnrepository.com/artifact/org.springframework.retry/spring-retry --&gt; 27 &lt;dependency&gt; 28 &lt;groupId&gt;org.springframework.retry&lt;/groupId&gt; 29 &lt;artifactId&gt;spring-retry&lt;/artifactId&gt; 30 &lt;/dependency&gt;</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>

页面列表

ITEM_HTML