SpringCloud bus 手动post可用 使用webhooks自动更新配置失效的解决小记
时间:2022-07-22
本文章向大家介绍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请求就不会出错了。
再次试验对配置进行更新后,访问消费端,成功读取到了最新的配置值。
- JavaWeb10-reques;response你不得不学(2)
- 很多人比较纠结的约束和索引的关系(r7笔记第75天)
- JavaWeb09-Servlet(Java真正的全栈开发)
- JavaWeb08-XML,tomcat,HTTP轻松入门
- JavaWeb07-JDBC(Java真正的全栈开发)
- 编程思想 之「操作符」
- Hyperledger fabric Chaincode 开发详解
- 字节码文件的内部结构之谜
- 基因功能富集分析-R语言
- CRM, C4C和Hybris的工作流简介
- 想进大厂?50个多线程面试题,你会多少?(一)
- golang 几种字符串的连接方式
- Go Template学习笔记
- Go语言实现控制台贪吃蛇
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- PhpStorm 如何优雅的调试Hyperf的方法步骤
- 在TP5数据库中四个字段实现无限分类的示例
- 详解Laravel设置多态关系模型别名的方式
- tp5修改(实现即点即改)
- 自定义Laravel (monolog)日志位置,并增加请求ID的实现
- PHP的Trait机制原理与用法分析
- 如何在centos8自定义目录安装php7.3
- 基于laravel belongsTo使用详解
- laravel model模型定义实现开启自动管理时间created_at,updated_at
- laravel ORM关联关系中的 with和whereHas用法
- thinkPHP事务操作简单案例分析
- php 多个变量指向同一个引用($b = &$a)用法分析
- 浅谈laravel5.5 belongsToMany自身的正确用法
- 在 PHP 和 Laravel 中使用 Traits的方法
- Laravel 修改默认日志文件名称和位置的例子