Spring Cloud Config 原理
我们通过git 把配置文件推送到远程仓库做版本控制,当版本发生变化的时候,远程仓库通过webhook机制推送消息给 Config Server,Config Server 将修改通知发送到消息总线,然后所有的Config Client 进行配置刷新。
非常巧妙的借助了Git来做配置文件修改的版本控制。
Consul Config 的FILES 机制
public enum Format {
/**
* Indicates that the configuration specified in consul is of type native key values.
*/
KEY_VALUE,
/**
* Indicates that the configuration specified in consul is of property style i.e.,
* value of the consul key would be a list of key=value pairs separated by new lines.
*/
PROPERTIES,
/**
* Indicates that the configuration specified in consul is of YAML style i.e., value
* of the consul key would be YAML format
*/
YAML,
/**
* Indicates that the configuration specified in consul uses keys as files.
* This is useful for tools like git2consul.
*/
FILES,
}
Consul 提供以上的策略,key/value、yaml、properties,可以很简单的通过Consule Config 的管理台进行配置,我们主要来看FILES,就是我们也是Cloud Config 一样,通过Git 来做版本控制,只是用Consul 做配置的分发和修改的通知。
原生的Consul不支持Git来做,需要借助Consul 社区提供的另外一个工程 git2consul
非常简单就下载就安装好了。
主要来讲一下初始化脚本的 git2consul.json
{
"version":"1.0",
"local_store": "本地仓库备份地址",
"logger":{
"name":"git2consul",
"streams":[
{
"level":"trace",
"type":"rotating-file",
"path":"生成日志路径/git2consul.log"
}
]
},
"repos":[
{
"name":"pig-config",
"url":"远程仓库地址",
"include_branch_name" : true, //分支信息是否包含到请求中,建议使用
"branches":[
"dev"
],
"hooks":[
{
"type" : "polling", //更新策略定时刷新的
"interval" : "1" //1分钟
}
]
}
]
}
启动时候指定上边的脚本
./git2consul --config-file git2consul.json
bootstarp.yml配置
spring:
application:
name: pig-auth
cloud:
consul:
host: localhost
port: 8500
config:
enabled: true
format: FILES
watch:
enabled: true
prefix: ${spring.application}/${spring.profiles.active}
profiles:
active: dev
OK 已经可以使用了 git2consul 来同步你的配置文件啦。
配置细节
如上图,我配置文件的例子。
FILES机制和Spring Cloud Config加载类似,application.yml 会被所有微服务模块加载公用,对应的application-name.yml 会被对应的微服务加载。
总结
- 经过整合Consul Config 已经完成了和Spring Cloud Config 相同的功能,Spring Cloud 微服务使用配置文件过程中并没有太大区别。
- 实时刷新机制和前文《Consul微服务的配置中心体验篇》提到的KEY-VALUE模式没有什么区别,git2consul 不仅支持webhook 的push,而且可以轮询pull,类似于 Apollo 配置中心的部分功能
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。