为spring cloud config实现刷新动态掉的坑
正常搭建配置中心,网上教程多,这里不讨论,只记坑也是为了后来者少花时间在这里,由于是
当时研究了好久才写的文章,所以只能提供问题的原因,当然会给出印证的思路,闲话不多说进入正题!
版本
spring boot2.1.6
spring boot admin 2.1.6
spring cloud GreenWich.SR1
启动时可以看见配置服务端加载了一些配置文件,如:Adding XXX,启动客户端时,发现有fetching XXX,并且使用/actuator/refresh可以刷新客户端,当然要刷新的配置需要使用@RefreshScope注解标注,实现了以上操作基本上已经搭建成功了.
在不使用spring boot admin(简称:SBA)接入服务时,实现动态刷新配置应该问题不大
接下来说重点
1.刷新的配置需要使用@RefreshScope注解
2.使用github或者gitee的Webhooks回调刷新接口时,会出现Json解析异常,这个是因为git里给的那些参数,转的Json不规范,解决方法是使用一个过滤器或者一个转发器,将请求体给干掉就行了
正常搭建后如果出现了下面两种情况,就是我掉的坑了,希望下面的分析对你们有用
第一种情况: config的服务端不接入SBA,config的客户端接入SBA,访问/actuator/bus-refresh接口可以通过日志发现配置的服务端可以接收到更新配置的消息,但是发现配置的客户端不会更新日志.
原因:配置客户端是需要通过配置中心刷新配置事件的监听去实现配置的刷新,但是SBA的接入破坏了时间的监听.有兴趣的可以通过在DispatchServlet这里端点跟进下源码,这里最终会进入到bus包进行处理,这一步说明配置端是没有任何问题的.
第二种情况: config的服务端和客户端都接入SBA,有趣的事情发生了,这时config服务端不会接收到任何消息,甚至可能会出现Method Not Support的异常,当然正常的现象应该是可以正常访问,会响应一个Json串,这个Json串具体的我忘了,这个响应与我们请求配置文件的信息类似.查看rabbitMQ会发现没有接收到任何的消息.
原因:因为不知道被谁解析了,所以只能通过DispatchServlet去看看到底是谁搞的,一根进,了不得,这个请求并不是给Bus解析的,而是被当成/{name}/{profile}.[正则表达式]解析的,具体在哪个包下我忘了,没记错的话应该是spring cloud config的包下解析的.
总的来说,就是SBA的问题,当时找了很久才看到有一个网站上敢说这个是spring留下的一个Bug,我也不知道是不是,但是我就是遇上了
接下来说说解决方法
1.有实力的可以修改源码,毕竟知道原因了
2.使用第三方配置中心,如:Apollo,Disconf,还有Nacos,需不需要使用第三方看自己项目的需求
3.使用其他版本,这个慎重吧,因为版本的修改有时会让你崩溃,当然如果修改版本对你项目影响不大的话,还是建议修改版本,这里给出自己测过没问题的版本SpringBoot-Admin2.0.3,SpringCloud.Finchley,所以说建立项目选择的依赖要慎重,不要使用太新的版本,否则遇到问题找不到比较好的解决方法,就会拖延你项目的进度,但是对于学习来说还是不错的,有坑的地方,只要你啃下去就会收获良多。
希望这篇文章对你们有帮助,当然也有可能是我菜,只意识到这里,如果有其他原因或者是其他解决方法希望可以留言给我,毕竟啃了这么久,啃错了也要让我知道下,不然就乱指导了。
为spring cloud config实现刷新动态掉的坑的更多相关文章
- Spring Cloud Config 自动刷新所有节点 架构改造
详细参考:<Sprin Cloud 与 Docker 微服务架构实战>p162-9.9.4节 要做的改动是: 1.在spring cloud config server 服务端加入 spr ...
- Spring Cloud Config 自动刷新所有节点
全局刷新 详细参考:<Sprin Cloud 与 Docker 微服务架构实战>p160-9.9.2节 1.使用Spring Cloud Config 客户端时,可以使用 /refresh ...
- Spring Cloud Config 配置刷新
客户端进行刷新操作. 1.添加 actuator包,这样 /refresh url才处于可用状态. <dependency> <groupId>org.springframew ...
- 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如 ...
- spring cloud config客户端
上篇介绍了spring cloud config服务器,本篇介绍客户端.客户端主要是从config服务器获取配置信息. 代码示例 首先创建一个Maven项目,在pom.xml文件中添加依赖: < ...
- 通过总线机制实现自动刷新客户端配置(Consul,Spring Cloud Config,Spring Cloud Bus)
通过总线机制实现自动刷新客户端配置 方案示意图 利用Git服务的webhook通知功能,在每次更新配置之后,Git服务器会用POST方式调用配置中心的/actuator/bus-refresh接口,配 ...
- Spring Cloud Config Server 节点迁移引起的问题,请格外注意这一点!
前言: 虽然强烈推荐选择使用国内开源的配置中心,如携程开源的 Apollo 配置中心.阿里开源的 Nacos 注册&配置中心. 但实际架构选型时,根据实际项目规模.业务复杂性等因素,有的项目还 ...
- springboot+cloud 学习(五)统一配置中心 spring cloud config + cloud bus + WebHooks +RibbitMQ
前言 微服务要实现集中管理微服务配置.不同环境不同配置.运行期间也可动态调整.配置修改后可以自动更新的需求,Spring Cloud Config同时满足了以上要求.Spring Cloud Conf ...
- Spring Cloud config之一:分布式配置中心入门介绍
Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持.配置服务器为各应用的所有环境提供了一个中心化的外部配置.它实现了对服务端和客户端对Spring Environm ...
随机推荐
- 暑假第五周总结(学习HBASE相关知识)
本周主要对HBASE的相关知识进行了学习,主要是通过视频的讲解了解到了HBASE的存储机制,HBASE的机制与普通的关系型数据库完全不同,HBASE以列进行存储,其主要执行的就是增删查操作,其更改主要 ...
- C++ 类模板详解(一):概念和基本使用方式
与函数模板类似地(C++函数模板详解(一):概念和特性) ,类也可以被一种或多种类型参数化.例如,容器类就是一个具有这种特性的典型例子,它通常被用于管理某种特定类型的元素.只要使用类模板,我们就可以实 ...
- Linux 误删catlina.out导致磁盘空间爆满,无法查询到大文件解决办法
大概是前俩天吧,发现公司的网站不定时的出现接口调不通的情况,便让手下小弟去服务器上查看一下,小弟告我磁盘空间满了,于是我让他处理一下.结果没想到他直接把 catlina.out 给干掉了.后果可想而知 ...
- Lua使用luasocket http请求例子
local http=require("socket.http"); local request_body = [[login=user&password=123]] lo ...
- linux入门系列9--用户管理及文件权限控制
前面文章分享了Linux下常用命令以及Shell编程相关知识,本节继续学习Linux用户管理及文件权限控制. Linux是多用户多任务操作系统,具有很好的稳定性和安全性.既然是多用户,那就意味 ...
- AJAX的出现与跨域处理
XMLHttpRequest JSON AJAX CORS 四个名词来开会 如何发请求 在前端的世界里也逛荡了不少日子了,目前已经get到大约5种发起请求的方式,主流的.非主流的. 何种方式 请求方法 ...
- python 迭代器和生成器详解
一.迭代器 说迭代器之前有两个相关的名词需要介绍:可迭代对象:只要定义了__iter__()方法,我们就说该对象是可迭代对象,并且可迭代对象能提供迭代器.迭代器:实现了__next__()或者next ...
- Go语言实现:【剑指offer】序列化二叉树
该题目来源于牛客网<剑指offer>专题. 请实现两个函数,分别用来序列化和反序列化二叉树. 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建 ...
- windows本地安装以及使用Jenkins
首先保证本地已安装JDK,Jenkins是需要Java开发的,需要JDK运行环境,此处不提供,网上一大把. 一.Jenkin安装: 下载Jekins,到官网下载,https://jenkins.io/ ...
- pytorch之 activation funcion
import torch import torch.nn.functional as F from torch.autograd import Variable import matplotlib.p ...