Spring Cloud config ------ 动态更新及spring cloud bus优化

在前面文章基础上进行,请参考:

Spring Cloud config ------ 基础使用

Spring Cloud config ------ 认证和安全

一 动态更新

spring cloud config配置中心客户端,会去服务端进行请求配置。服务端及客户端启动后,在配置仓库中更改了客户端的配置后,客户端不会主动再次请求最新配置,而是使用缓存到本地的原来的配置信息,怎么才能使用更改后的配置?

方法一:

重启大法,重启服务后,可以得到最新配置,但线上环境一般不允许此操作。

方法二:

动态更新,客户端pom添加如下依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

客户端获取配置的类上添加@RefreshScope注解即可。

启动客户端,可以看到启动信息里已经暴露出actuator的health及info端点(默认只暴露出这两个),可在application.properties中配置如下暴露出所有actuator端点:

management.endpoints.web.exposure.include=*

再次启动,可以看到已经暴露出/actuator/refresh接口,修改配置仓库中的相关客户端的配置项,调用相关客户端实例的/actuator/refresh接口,就实现了不重启应用的配置热更新。注意:此种热更新和配置中心服务端没什么关系。

二 spring cloud bus优化动态更新

上面的缺点是:一般微服务实例会分布式部署的,服务实例会有多个,如果更改了客户端的某个配置,需要把客户端的/actuator/refresh接口挨个调用遍才可以,很显然是不合理的。

所以需要集成spring cloud bus进行优化,这里配置中心服务端就参与进来了。

服务端pom添加依赖(使用rabbitmq,也可以使用kafka,rabbitmq的安装自行百度)(无需添加actuator依赖):

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

application.properties里要配置相应的rabbitmq信息,如下:

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

可以看到启动信息里暴露出了/actuator/bus-refresh端点,待会就是通过调用服务端的此接口进行客户端所有服务实例的配置动态更新。

客户端pom文件同样添加spring-cloud-starter-bus-amqp依赖,application.properties中同样添加rabbitmq配置信息。

到此为止,优化完毕。

例如config-client启动n个实例,配置仓库中改变了改服务的配置项,只需要调用配置中心服务端的一个实例的/actuator/bus-refresh即可,服务端会通知config-client所有服务端进行更新配置。同样,如果服务端是多实例,多个实例也会同步配置更改。

项目中,就无需关注客户端,只对服务端进行更新即可。

具体代码参考:github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hjbbjh0521

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值