Config配置刷新

1、Config配置手动刷新

        不用重启微服务,只需要手动的做⼀些其他的操作(访问⼀个地址/refresh)刷新,之后再访问即可。

        此时,客户端取到了配置中心的值,但当我们修改GitHub上面的值时,服务端(Config Server)能实时获取最新的值,但客户端(Config Client)读的是缓存,无法实时获取最新值。Spring Cloud已经为我们解决了这个问题,那就是客户端使用post去触发refresh,获取最新数据。

  • Client客户端添加依赖springboot-starter-actuator(已添加)
  • Client客户端bootstrap.yml中添加配置(暴露通信端点)
management:
    endpoints:
        web:
            exposure:
                include: refresh
# 也可以暴露所有的端⼝(二选一)
management:
    endpoints:
        web:
            exposure:
                include: "*"
  • Client客户端使用到配置信息的类上添加@RefreshScope
  • 手动向Client客户端发起POST请求,http://localhost:8080/actuator/refresh,刷新配置信息

注意:手动刷新方式避免了服务重启(流程:Git改配置—>for循环脚本手动刷新每个微服务)

2、Config配置自动更新

    实现⼀次通知处处生效,在微服务架构中,我们可以结合消息总线(Bus)实现分布式配置的自动更新(Spring Cloud Config+Spring Cloud Bus)

2.1、消息总线Bus

        所谓消息总线Bus,即我们经常会使用MQ消息代理构建一个共用的Topic,通过这个Topic连接各个微服务实例,MQ广播的消息会被所有在注册中心的微服务实例监听和消费。换言之就是通过一个主题连接各个微服务,打通脉络。

        Spring Cloud Bus(基于MQ的,支持RabbitMq/Kafka) 是Spring Cloud中的消息总线方案,Spring Cloud Config + Spring Cloud Bus 结合可以实现配置信息的自动更新。

2.2、Spring Cloud Config+Spring Cloud Bus 实现自动刷新 

        MQ消息代理,我们还选择使用RabbitMQ,ConfigServer和ConfigClient都添加都消息总线的支持以及与RabbitMq的连接信息

(1)Config Server服务端和客户端添加消息总线支持相关依赖

 <!--eureka client 客户端依赖引入-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        
        <!--Config 客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
        
        <!--   消息总线     -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

(2)ConfigServer添加配置(保证自己的电脑是已安装号rabbitmq)

spring:
    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: "*"

(5)重启各个服务,更改配置之后,向配置中心服务端发送post请求

http://localhost:9003/actuator/bus-refresh 各个客户端配置即可自动刷新

在广播模式下实现了一次请求,处处更新,如果我只想定向更新呢?

在发起刷新请求的时候

http://localhost:9006/actuator/bus-refresh/lagou-serviceresume:8081

即为最后面跟上要定向刷新的实例的 服务名:端口号即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

悠然予夏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值