一定要看的走坑之路!SpringCloud统一配置中心 config Server

您所在的位置:网站首页 springcloud配置中心详解 一定要看的走坑之路!SpringCloud统一配置中心 config Server

一定要看的走坑之路!SpringCloud统一配置中心 config Server

2023-02-28 12:36| 来源: 网络整理| 查看: 265

先说下client拿config的配置文件的流程!,这个不了解,很容易进坑!

1.如果config client 的配置文件为application.properties的时候

client 启动项目时,直接找自己properties,如果这个时候项目中有引用properties中的属性的时,项目启动就直接报错,因为他根本就不会去config server中找,所以找不到,就启动不了项目!!而且显示fetch config为localhost:8888说明他没有去config中拿配置文件。所以要把application.properties改名为bootstarp.properties

2.当config client的配置文件为bootstrap.properties的时候

这个时候,client先看自己的properties有没有eureka server的注册地址 1.如果有,就从自己的properties定义的defaultZone中注册到eureka server,并且找到注册在eureka server中的config server,于是就从config server中拿配置文件,拿到了之后再启动项目。 2.如果没有,就访问默认的eureka server地址:http://localhost:8761/eureka。如果eureka server在这上面,那么就找到了,如果不在,那么也找不到config server。

3.当git上一个分支有多个版本的properties的时候,如:client.properties, client-dev.properties, client-test.properties

这个时候若client指定要拿dev。但是,config server这边则是把client.properties, client-dev.properties这两个配置文件搞一起,再给client端。因此,假如client.properties,client-dev.properties这俩文件有相同的部分,你改了其中一个,并不会生效,因为他们是搞一起给client的。要改两个都要改

所以:要把application.properties改名为bootstrap.properties,并且最好不要把eureka server的端口改为其他的。git一个分支多个版本的文件,原版和扩展版,不要出现相同的内容。

现在介绍config server和client端的构建。最后面介绍自动刷新 config Server:

1.在创建springboot项目的时候勾选,Eureka client +config Server 2.在github上创建一个仓库,写入一个yml配置文件,或者properties文件 在这里插入图片描述 3.在config server项目的启动类上加注解: 在这里插入图片描述 4.写它的配置文件:

spring: application: name: config cloud: config: server: git: uri: https://github.com/vanNo1/config-repo username: xxxx password: xxxx # basedir: 存放从git上拉取下来的配置文件地址,也就是本地git eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ management: endpoints: web: exposure: include: "*"

这是要开放/bus-fresh接口,用于实现自动刷新: 在这里插入图片描述 验证: 启动之后在浏览器访问:localhost:8080/client-dev.yml 在这里插入图片描述 规则:/{label}/{name}…{profiles}.yml name:服务名(client) profiles:环境(dev) label(分支)默认为master yml:这里也可以换成properties ,json 显示的内容会换成不同的格式

config client:

1.加入依赖:

org.springframework.cloud spring-cloud-config-client org.springframework.cloud spring-cloud-starter-bus-amqp

2.写配置文件:

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

其他的可以全部删掉了,保留这两个即可,这里是config server项目在eureka上注册的application name 在这里插入图片描述

接着把applicationProperties改为: 在这里插入图片描述 要不然启动还是读自己配置文件,而不是去config server那里拿配置中心的文件 3.启动client 项目,其实就已经从config server拿取配置文件了,如果要验证,可以在controller上把配置文件打出来。

坑:

1.如果Eureka server的端口号不是默认的8761,被我改成了如:8762 那么config client 这边会报错,因为它先去eureka server那儿注册自己,然后去config server这边拿配置文件 。现在它自己的配置文件都没有写eureka注册的地址,那么只能访问默认的eureka server port为8761.但结果又被我改了port为8762,那么它当然会报错。 正确的方法:直接把注册配置:defaultZone写在它的配置里面,不要放在配置中心。 2.如果git上有如:client.yml,client-test.yml,client-dev.yml。也就是同时有很多个client版本的yml。假如我client在配置中心用的是dev版本的,但是我更改了dev这个yml,会没有变化。因为,配置中心,它每次加载的是client.yml和client-dev.yml组合起来给client项目用的,所以改了client-dev.yml,你还要改client.yml才行。一般在client.yml里面放主配置。在其他版本里面放扩展的配置

。。。。。。。。。。。。。。。。。。。。。。。

下面实现自动刷新

在这里插入图片描述 以上做的还是无法达到自动刷新,也就是一旦我更改了配置文件,client端还是要重启项目才能刷新配置。 自动刷新原理: 最上面的图已经说了。client一开始启动的时候去拿config server中的文件 但是config server更改了文件却不会通知config server中的信息已经变动了,让他重新获取。所以client项目必须再重启才行。 现在:让config server去实现spring cloud bus,会暴露一个接口,/bus-refresh接口。只要用post访问这个接口,那么config server就会发出信息给MQ然后MQ再给client端,让client重新拿过一份配置文件。而这个/bus-refresh由git发出 。。。。。。。。。。。。。。。。。

实现:

1.在config server中加依赖:

org.springframework.cloud spring-cloud-starter-bus-amqp

ok了之后,在浏览器访问localhost:15672可以看到rabbitMQ启动。 在client也引入这个依赖,此时会发现rabbitMQ又多了一个queue 在config server 开放bus-refresh接口。: 在这里插入图片描述 如果文件是properties类型:这样写:

management.endpoints.web.exposure.include=*

重启config server 会出现,“Endpoint ID bus-refresh contains invalid characters please migrate to a valid format”,我扎一开始认为没有开放成功。端口,然后查了很多资料发现是spring版本什么冲突。但!!!!!我试了下,并不影响我访问这个接口

下面在client 的controller加注解: 在这里插入图片描述 之后,只要改了git上面的配置文件,再用post访问bus-refresh接口就能做到client项目不重启也可以自动更新配置了: 在这里插入图片描述

访问localhost:8080/actuator/bus-refresh 新版本要加actuator

有关config server的集群:直接多创建几个实例即可,client端自己会均衡访问config server的不同实例 其实在git上配置webhook一直不成功。查了各种方式也没用,甚至在controller中转发一下,再用restTemplate去post请求bus-refresh也不成功。。。后续再搞吧,也希望有大神能提供点方法


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3