springcloud config配置中心搭建
一、为什么使用配置中心:
对于一些简单的项目来说,我们一般都是直接把相关配置放在单独的配置文件中,以 properties 或者 yml 的格式出现,更省事儿的方式是直接放到 application.properties 或 application.yml 中。
- 安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏
- 时效性:修改配置,需要重启服务才能生效
配置中心:Apollo(阿波罗)、Spring Cloud Config解决了以上问题
二.、SpringCloud Config配置中心
1、简单的配置中心:
不需要集成Mq、SpringCloud Bus等,如果只有一个 client 端的话,那我们用 webhook ,设置手动刷新都不算太费事,但是如果端比较多的话呢,一个一个去手动刷新未免有点复杂。
2、SpringCloud Config + Bus + RabbitMq配置中心
可以借助 Spring Cloud Bus 的广播功能,让 client 端都订阅配置更新事件,当配置更新时,触发其中一个端的更新事件,Spring Cloud Bus 就把此事件广播到其他订阅端,以此来达到批量更新。
Spring Cloud Bus 核心原理其实就是利用消息队列做广播,所以要先有个消息队列,目前官方支持 RabbitMQ 和 kafka。
三、SpringCloud Config + Bus + RabbitMq配置中心搭建
1、搭建eureka注册中心:
2、SpringCloud Config服务端:
【1】引入config和bus组件
【2】启动类使用@EnableConfigServer注解
【3】application.yml文件配置rabbitmq和git仓库
配置RabbitMQ是因为bus组件需要使用它来通知
客户端
3. 客户端接入配置中心
【1】引入依赖
【2】配置RabbitMQ和引入配置中心的url
RabbitMQ配置可以放在git上,需要和config服务端保持一致
注意点:spring cloud config相关的配置一定一定要放到bootstrap.properties/yml里,否则还是会取本机的8888端口;
如果在Java类里有读取配置文件的地方,需要在类上加@RefreshScope
4.修改配置文件,验证是否自动刷新
【1】修改配置文件,并提交git
提交后,调用url接口发现,值并没有刷新,那是因为push到git的这个动作做完后,我们没有通知到spring cloud bus。可以使用postman来做一个post
请求,调用如下接口,来通知bus。--config服务ip:端口号/bus/refresh
http://localhost:8192/bus/refresh
这个接口一旦调用成功,bus会利用RabbitMQ通知所有的客户端,配置已经更新。
如果每次提交,都要去调用服务端的/bus/refresh
接口,那这个也太麻烦了。可以使用webhook来帮一下忙。
进入gitlab,在工程里面,点击【Settings】,再点击【Integrations】,就可以设置webhook了,如下图
url里面填入配置中心服务端的/bus/refresh
接口地址,然后点击【添加Webhook】就可以了。