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

news/2024/7/23 23:48:34 标签: springcloud, bus, config

先说解决办法:

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

        <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路径后,成功输出配置文件中的值。

当访问配置中心http://localhost:8080/order-dev.yml时 会输出最新的值 因为他去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请求就不会出错了。

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

 


http://www.niftyadmin.cn/n/1786751.html

相关文章

Python 判断 is 与 == 的区别

is 用于判断两个变量引用对象是否为同一个&#xff0c; 用于判断引用变量的值是否相等。 Python中&#xff0c;万物皆对象 每个对象包含3个属性&#xff0c;id&#xff0c;type&#xff0c;value id就是对象地址&#xff0c;可以通过内置函数id()查看对象引用的地址。 typ…

Java 记一次自定义比较器中compareTo方法使用long强转int作为比较结果产生的bug

最近换了新工作&#xff0c;改bug作为熟悉业务及代码的快速途径&#xff0c;是每个新人都要经历的 代码不难&#xff0c;难的是业务不熟&#xff0c;很多地方不知道为什么要这么写。当然&#xff0c;时间久了就好了 这次要找的bug是排序问题&#xff0c;前端请求接口&#xff…

分享一些收藏的技术学习网站

免费在线学习代码重构和设计模式 在线学习设计模式&#xff0c;有代码有例子&#xff0c;更加生动 What is Machine Learning? - 斯坦福大学 | Coursera 吴恩达的机器学习入门必看课程&#xff0c;有中文字幕 社区 Spring Security 从入门到进阶系列教程 | Spring For All 学…

使用Logstash接收Netflow日志并发送到syslog服务器

接受90端口的netflow日志&#xff0c;解析netflow中的源IP、端口、目的IP、端口&#xff0c;并输出syslog到任意端口 netflow日志格式&#xff1a; { "netflow" > { "last_switched" > "2020-05-28T02:39:13.781Z", …

Java 使用Runtime在一个Java程序中启动和关闭另一个Java程序

主要使用了 Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", cmd});调用shell命令的工具类&#xff1a; public static String runShell(String cmd) throws Exception {StringBuilder result new StringBuilder();Process process null;Bu…

杂记 选一款心仪的听歌软件

我是个音乐重度爱好者&#xff0c;从小时候买盗版DVD&#xff0c;用着光碟机一首歌能听一上午&#xff0c;偶尔随机播放听到一首心仪的歌&#xff0c;便要听个过瘾&#xff0c;越循环播放越是感到愉悦。到现在对各种耳机、音响的向往&#xff0c;我舍不得花一千块买别的&#x…

Chrome 浏览器地址栏显示完整网址 不隐藏http/https的设置方法 83版本可用

地址栏输入 chrome://flags/ 访问后 搜索 Context menu show full URLs 设置为enabled 并根据提示relaunch浏览器 在地址栏右键 弹出菜单中点击 总是显示完整网址 老版本中的 UI Hide Steady-State URL Scheme and Trivial Subdomains 设置项早就被干掉了

Spring BindingResult获取不到结果可能的原因之一 参数顺序 没有紧挨着校验参数

Valid或Validate的参数后必须紧挨着一个BindingResult 参数&#xff0c;否则spring会在校验不通过时直接抛出异常 public InternalResponseVo updateSource(Validated RequestBody(required false) SourceValidator sourceValidator, PathVariable int id, BindingResult bind…