微服务下的分布式配置中心最终实现理念:一个基于http协议的远程配置实现方式。通过统一的配置管理服务器进行配置管理,客户端通过https协议主动的拉取服务的的配置信息,完成配置获取。
说人话:统一管理配置, 快速切换各个环境的配置
官方文档:https://cloud.spring.io/spring-cloud-static/Finchley.SR1/multi/multi_spring-cloud.html
相关产品:
百度的disconf
地址:https://github.com/knightliao/disconf
阿里的diamand
地址:https://github.com/takeseem/diamond
springcloud的configs-server:
地址:http://cloud.spring.io/spring-cloud-config/
搭建服务端:
1、新建一个springboot项目,加入注册中心的配置
2、启动类增加注解@EnableConfigServer
3、新增部分pom文件内容
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring config配置-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
4、yml文件(gitlab地址需要加上git后缀,github则可以忽略):
server:
port: 7009
servlet:
context-path: /
tomcat:
uri-encoding: UTF-8
#spring
spring:
profiles:
active: dev
application:
name: config-server
cloud:
config:
server:
git:
uri: http://gitlab.XXX.git
username: XXX
password: XXX
#超时时间
timeout: 5
#分支
default-label: master
#actuator
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: ALWAYS
#eureka
eureka:
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
client:
registryFetchIntervalSeconds: 5
service-url:
defaultZone: XXX
#rabbitmq
rabbitmq:
host: xxx
port: xxx
username: admin
password: admin
rabbitmq是用来做busmq刷新队列的
以上就完成了config服务的配置,git仓库地址请自行创建
测试config服务是否搭建完成,在git仓库里上传一份配置文件
由于我的分支是dev,在路径中添加了dev 在浏览器中输入:http://localhost:7009/dev/admin-os-dev.yml,可以正常查看到在git仓库中的配置
由此证明可以正常从config服务中拉取git仓库的配置文件
访问方式有多种,启动的日志中也有标注:
/{name}-{profiles}.properties
/{name}-{profiles}.yml
/{name}-{profiles}.json
/{label}/{name}-{profiles}.yml
name 服务器名称
profile 环境名称,开发、测试、生产
lable 仓库分支、默认master分支