10-2、Spring Cloud Config配置中心:刷新的问题


客户端取到了配置中⼼的值之后,我们修改GitHub上⾯的值时,服务端(Config Server)能实时获取最新的值,但客户端(Config Client)读的是缓存,⽆法实时获取最新值。

Spring Cloud已 经为我们解决了这个问题,那就是客户端使
⽤post去触发refresh,获取最新数据。

一、手动刷新

⼿动刷新⽅式避免了服务重启,需要访问一个地址进行刷新,之后再访问即可。

如果,我们修改Git上的值的时候,服务端(Config Server:http://localhost:9006/master/lagou-service-resume-dev.yml)能实时获取最新的
值,但客户端(Config Client,简历微服务)读的是缓存,⽆法实时获取最新值。

如,git上的信息,我们由100修改成200
访问服务端,是最新的数据。
在这里插入图片描述
但是访问客户端,还是旧的数据
在这里插入图片描述

Spring Cloud已 经为我们解决了这个问题,那就是客户端使⽤post去触发refresh,获取最新数据。

(一)Client客户端添加依赖springboot-starter-actuator(已添加)

在这里插入图片描述

(二)Client客户端bootstrap.yml中添加配置(暴露通信端点)

# 暴露通信端点      
management:
  endpoints:
    web:
      exposure:
        include: refresh

也可以暴露所有的端⼝

# 暴露通信端点      
management:
  endpoints:
    web:
      exposure:
        include: "*"

(三)Client客户端使⽤到配置信息的类上添加@RefreshScope

在这里插入图片描述

(四)测试

1、修改git上的配置

①访问服务端:

在这里插入图片描述

②访问客户端:

此时还是旧的数据。还差一步刷新
在这里插入图片描述

③⼿动向Client客户端发起POST请求刷新配置

注意:必须是post请求
http://localhost:8080/actuator/refresh在这里插入图片描述

④再次查询客户端配置信息

已经是最新的数据了
在这里插入图片描述

二、自动刷新

手动刷新只能每次刷新一个服务,但是现实中大部分都是集群,需要一下子更新很多个服务。除了一个个执行手动刷新之外,还可以使用Bus,进行批量刷新。

使用Spring Cloud Config + Spring Cloud Bus,实现分布式配置的⾃动更新

Spring Cloud Bus(Bus消息总线,基于MQ的,⽀持RabbitMq/Kafka) 是Spring Cloud中的消息总线⽅案。

(一)解决方案

所谓消息总线Bus,即我们经常会使⽤MQ消息代理构建⼀个共⽤的Topic,通过这个Topic连接各个微服务实例,MQ⼴播的消息会被所有在注册中⼼的微服务实例监听和消费。

换言之就是通过一个主题连接各个微服务,打通脉络。
在这里插入图片描述

相比之前的,多了一个Spring Cloud Bus消息总线。

  1. 刷新的时候,不再一个个的刷新微服务,而是直接刷新 Config Server
  2. Config Server刷新的时候,会发送消息给消息总线Bus(mq)
  3. 由于各微服务对总线是有订阅的,所以,各微服务会接收到总线发送的刷新的消息
  4. 各微服务收到消息总线Bus的消息之后,也会触发各自的刷新。从而实现一处刷新,处处生效。

(二)使用步骤

为了模拟有多个使用config的微服务,先将端口号8081的resume服务,按照上面8080端口号的resume服务一样,改造成使用config。

MQ消息代理,选择使⽤RabbitMQ。
ConfigServer、ConfigClient都添加都消息总线的⽀持以及与RabbitMq的连接信息。(即,8080 8081两个resume服务,configserver-9006的config服务,都要执行以下几个步骤

1)ConfigServer和ConfigClient都添加以下依赖

<!-- 引入 Config Server服务端添加消息总线⽀持-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>        

2)ConfigServer和ConfigClient添加配置

注意:级别是:spring.rabbitmq

rabbitmq:
  host: 127.0.0.1
  port: 5672
  username: guest
  password: guest

3)微服务暴露端⼝

management:
  endpoints:
    web:
      exposure:
        include: bus-refresh

建议暴露所有的端⼝

management:
  endpoints:
    web:
      exposure:
        include: "*"

4)修改git云上的配置文件之后,发送请求进行刷新

①服务端依旧可以直接获取最新数据

在这里插入图片描述

②执行bus-refresh

http://localhost:9006/actuator/bus-refresh
在这里插入图片描述

③各客户端已经可以获取到最新数据了

在这里插入图片描述
在这里插入图片描述

5)定向刷新

http://localhost:9006/actuator/bus-refresh/lagou-service-resume:8088
即为最后⾯跟上要定向刷新的实例的 服务名:端⼝号即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值