前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud bus 手动post可用 使用webhooks自动更新配置失效的解决小记

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

作者头像
heasy3
发布2020-08-03 09:21:43
5230
发布2020-08-03 09:21:43
举报

先说解决办法:

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

代码语言:javascript
复制
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-monitor</artifactId>
        </dependency>

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

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

代码语言:javascript
复制
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
spring:
  application:
    name: order
  cloud:
    config:
      discovery:
        enabled: true
        service-id: CONFIG
      profile: dev

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

代码语言:javascript
复制
@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请求就不会出错了。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先说解决办法:
    • 在GitHub上创建了一个仓库用来存储配置。
      • 配置中心及消费端要使用消息总线都要添加的依赖:
        • 配置中心的配置文件application.yml:
          • client端的配置文件bootstrap.yml:
            • 测试使用的controller,直接输出env变量来观察是否更新了该配置:
            相关产品与服务
            微服务引擎 TSE
            微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档