springcloud config配置中心搭建

一、为什么使用配置中心:

对于一些简单的项目来说,我们一般都是直接把相关配置放在单独的配置文件中,以 properties 或者 yml 的格式出现,更省事儿的方式是直接放到 application.properties application.yml 中。

  • 安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏
  • 时效性:修改配置,需要重启服务才能生效

配置中心Apollo(阿波罗)、Spring Cloud Config解决了以上问题

.SpringCloud Config配置中心

1、简单的配置中心:

不需要集成MqSpringCloud Bus等,如果只有一个 client 端的话,那我们用 webhook ,设置手动刷新都不算太费事,但是如果端比较多的话呢,一个一个去手动刷新未免有点复杂。

2SpringCloud Config + Bus + RabbitMq配置中心

可以借助 Spring Cloud Bus 的广播功能,让 client 端都订阅配置更新事件,当配置更新时,触发其中一个端的更新事件,Spring Cloud Bus 就把此事件广播到其他订阅端,以此来达到批量更新。

Spring Cloud Bus 核心原理其实就是利用消息队列做广播,所以要先有个消息队列,目前官方支持 RabbitMQ kafka

三、SpringCloud Config + Bus + RabbitMq配置中心搭建

1、搭建eureka注册中心:

2SpringCloud Config服务端:

【1】引入config和bus组件

springcloud config配置中心搭建

 

【2】启动类使用@EnableConfigServer注解

springcloud config配置中心搭建

 

【3】application.yml文件配置rabbitmq和git仓库

springcloud config配置中心搭建

springcloud config配置中心搭建

 

配置RabbitMQ是因为bus组件需要使用它来通知客户端

3. 客户端接入配置中心

【1】引入依赖

springcloud config配置中心搭建

 

【2】配置RabbitMQ和引入配置中心的url

RabbitMQ配置可以放在git上,需要和config服务端保持一致

springcloud 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】就可以了。

springcloud config配置中心搭建