专栏首页用户7614879的专栏SpringCloud bus 手动post可用 使用webhooks自动更新配置失效的解决小记

SpringCloud bus 手动post可用 使用webhooks自动更新配置失效的解决小记

先说解决办法:

查阅网上资料发现大家的问题其实都出在少了一个依赖,而不应该手动去拦截。这个依赖加在配置中心上

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-monitor</artifactId>
        </dependency>

在GitHub上创建了一个仓库用来存储配置。

配置中心及消费端要使用消息总线都要添加的依赖:

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

配置中心的配置文件application.yml:

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://github.com/37176427/config-repo.git
          username: 
          password: 
          #配置存储目录
          basedir: /fileRoot/config/baseDir
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
management:
  endpoints:
    web:
      exposure:
        include: "*"

client端的配置文件bootstrap.yml:

spring:
  application:
    name: order
  cloud:
    config:
      discovery:
        enabled: true
        service-id: CONFIG
      profile: dev

测试使用的controller,直接输出env变量来观察是否更新了该配置:

@RestController
@RequestMapping("/env")
@RefreshScope
public class EnvController {

    @Value("${env}")
    private String env;

    @GetMapping("/print")
    public String print() {
        return env;
    }
}

项目运行并访问localhost:8081/env/print路径后,成功输出配置文件中的值。

当访问配置中心时 会输出最新的值 因为他去GitHub上拉取文件了

在GitHub上更改了值后,再次访问消费端路径 localhost:8081/env/print,并没有更新为新值,没有同步到最新的配置

发起一个post请求 curl -v -X POST "http://localhost:8080/actuator/bus-refresh" 此时的路径是/actuator/bus-refresh

可以看到配置中心config项目有新打印的日志 访问消费端/env/print后 值更新为最新值。

为了避免每次都要手动发起post请求来更新配置的弊端 使用了GitHub中的webhooks,它可以在每次该仓库有push时,对你设定的url发起一个post请求。

这里设定的路径为 http://外网域名/monitor 这个外网域名可以用natapp免费申请。正常情况下webhooks发起的post请求不应该返回400 404等错误

大多问题出现在这里,网上很多解决方案其实就是将这个post请求进行拦截,然后去调用/actuator/bus-refresh这个之前手动更新配置的路径来规避错误。

加上上述这个依赖后,重启项目,对/monitor路径进行post请求就不会出错了。

再次试验对配置进行更新后,访问消费端,成功读取到了最新的配置值。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Cloud(七)《基于RabbitMQ消息总线方式刷新配置服务》

    在微服务架构中,为了更方便的向微服务实例广播消息,我们通常会构建一个消息中心,让所有的服务实例都连接上来,而该消息中心所发布的消息都会被微服务实例监听和消费,我...

    小傅哥
  • 「 从0到1学习微服务SpringCloud 」06 统一配置中心Spring Cloud Config

    「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到...

    KEN DO EVERTHING
  • SpringCloud系列第09节之消息总线Bus

    上一节的统一配置中心《SpringCloud系列第08节之配置中心Config》演示了属性热加载

    wuweixiang
  • SpringCloud-微服务配置统一管理SpringCloud Config(七)

  • Spring Cloud Config - 统一配置中心

    废话不多说,本小节我们来开发统一配置中心的server端,在IDEA中新建一个Spring Initializr项目,并选择相应的模块:

    端碗吹水
  • Spring Cloud(六)《基于github webhook动态刷新服务配置》

    在实际开发中经常会有一个叫做配置中心的服务,这个服务经过变更参数来动态刷新线上业务数据行为配置。比如;行为开关、活动数据、黑白名单、本地/预发/线上环境切换等等...

    小傅哥
  • 一文透析SpringCloud,关于Bus消息总线,总算梳理清楚了

    消息代理中间件构建一个共用的消息主题让所有微服务实例订阅,当该消息主题产生消息时会被所有微服务实例监听和消费。

    Java程序猿阿谷
  • springcloud:配置中心与Bus消息总线

    ​ 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集...

    冷环渊
  • Spring Cloud Config

    /{label}/{name}-{profiles}.yml /{name}-{profiles}.yml name git的文件名称不包括后缀 profiles ...

    HUC思梦
  • [菜鸟SpringCloud实战入门]第八章:通过消息总线Bus实现配置文件统一刷新(使用Kafka)

    欢迎来到菜鸟SpringCloud实战入门系列(SpringCloudForNoob),该系列通过层层递进的实战视角,来一步步学习和理解SpringCloud。

    Rude3Knife的公众号
  • SpringCloud入门(7)Bus

    上一节中的Config虽然解决了配置文件繁杂的问题,但是有一个弊端,那就是当我们服务端代码修改后,也就是gitee上的东西修改后需要再次启动服务才能够使修改生效...

    用户8902830
  • Spring Cloud Bus:消息总线

    我们通常会使用消息代理来构建一个主题,然后把微服务架构中的所有服务都连接到这个主题上去,当我们向该主题发送消息时,所有订阅该主题的服务都会收到消息并进行消费。使...

    macrozheng
  • Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)

    上一篇文章,留了一个悬念,Config Client 实现配置的实时更新,我们可以使用 /refresh 接口触发,如果所有客户端的配置的更改,都需要手动触发客...

    搜云库
  • SpringCloud-Bus消息总线

    在SpringCloud-Config里我们讲到了使用外部统一的配置(案例采用GitHub)来托管我们的配置文件。但是有个小问题,如何让他们修改一处就处处生效而...

    乐心湖
  • Spring Cloud 如何动态刷新 Git 仓库配置?

    spring-boot-starter-actuator:这个模块的 /actuator/refresh (POST请求)端点可以刷新配置,更多的使用参考 Sp...

    Java技术栈
  • springCloud -- 中级篇(2)

    本系列笔记涉及到的代码在GitHub上,地址:https://github.com/zsllsz/cloud

    贪挽懒月
  • [菜鸟SpringCloud实战入门]第八章:通过消息总线Spring Cloud Bus实现配置文件刷新(使用Kafka)

    欢迎来到菜鸟SpringCloud实战入门系列(SpringCloudForNoob),该系列通过层层递进的实战视角,来一步步学习和理解SpringCloud。

    蛮三刀酱
  • springcloud(九):配置中心和消息总线

    我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行 refresh,我们可以利用webho...

    纯洁的微笑
  • 微服务配置 Config 与消息总线

    启动之后访问 http://localhost:3344/master/config-dev.yml 查看打印出来的信息:

    wsuo

扫码关注云+社区

领取腾讯云代金券