• Config配置刷新


    1、Config配置手动刷新

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

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

    • Client客户端添加依赖springboot-starter-actuator(已添加)
    • Client客户端bootstrap.yml中添加配置(暴露通信端点)
    1. management:
    2. endpoints:
    3. web:
    4. exposure:
    5. include: refresh
    6. # 也可以暴露所有的端⼝(二选一)
    7. management:
    8. endpoints:
    9. web:
    10. exposure:
    11. 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服务端和客户端添加消息总线支持相关依赖

    1. <dependency>
    2. <groupId>org.springframework.cloudgroupId>
    3. <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>org.springframework.cloudgroupId>
    7. <artifactId>spring-cloud-config-clientartifactId>
    8. dependency>
    9. <dependency>
    10. <groupId>org.springframework.cloudgroupId>
    11. <artifactId>spring-cloud-starter-bus-amqpartifactId>
    12. dependency>

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

    1. spring:
    2. rabbitmq:
    3. host: 127.0.0.1
    4. port: 5672
    5. username: guest
    6. password: guest

    (3)微服务暴露端口

    1. management:
    2. endpoints:
    3. web:
    4. exposure:
    5. include: bus-refresh
    6. # 建议暴露所有的端⼝(二选一)
    7. management:
    8. endpoints:
    9. web:
    10. exposure:
    11. include: "*"

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

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

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

    在发起刷新请求的时候

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

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

  • 相关阅读:
    4T硬盘剩余很多提示“No space left on device“磁盘空间不足
    redis场用命令及其Java操作
    redis数据结构
    嵌入式UBoot如何跳转Kernel—uboot与linux交界分析
    43.228.64.X游戏盾在业务高峰时间段,出现用户大量掉线问题,可能是什么原因导致
    无效的 page.json [“window“] 页面.json配置了“window“: {“disableScroll“: true}
    docker安装rabbitmq集群部署(适合3.8.9版本以上),不同服务器
    TiDB Data Migration 快速上手指南
    StableAudio-大模型创作音乐的工具
    气传导耳机有哪些品牌?性能不错的气传导耳机分享
  • 原文地址:https://blog.csdn.net/weixin_52851967/article/details/126567808