最近公司想让我看看微服务
正好我也想看看新东西,天天解决业务问题。。。太没有激情了。。。而且我们大多应用都还是springmvc
,springboot
的应用都很少,只有几个,唉,我也是深陷业务问题中
Spring Cloud
也算是一个全家桶吧,里面东西也多,不过从感觉开箱即用的原则来看,用起来也比较顺手,demo
也都很好搭建,
从开始的网关+服务的着手,网关我采用的Zuul
,服务治理采用的eureka
,后面想用spring cloud config
作为配置中心,但是还要自己搭一个server
很是麻烦。。。我也懒。。。无意听同事说,其实全家桶里服务治理可以用spring cloud consul
,而consul
就自带一个配置功能,于是我去了解了spring cloud consul config
spring cloud consul config
本身依赖spring cloud consul
的agent server
,所以只要agent server
启动了,其实就相当于有了一个server
来做配置,我满心欢喜的把服务治理eureka
改为spring cloud consul
,嗖嗖两下,spring cloud consul
也配置好了
命令行里执行了,启动测试模式的agent server
consul agent -dev
打开localhost:8500
, 很明显有了一个类似配置中心的菜单
点开进去啥也没有。。。只有右边一个创建按钮
也没灰心,我先是去官网介绍看了看 官网链接描述
我承认我英语是差了。。。看了半天,我真是没看明白怎么使用。。。当时我有点懵逼,说好的很好操作的呢
没办法,我只有去百度了哈,看了很多文章,基本所有文章说的都是差不太多,但是这个差不太多又都没有说清楚到底怎么玩。。。
好吧,这个时候我有点承认我自己理解能力有点问题了,心想既然大家都没有说清楚,估计应该就是很容易理解,所以大家心照不宣,我又反复读了哈官方的描述,并且找了springcloud.cc
里的中文说明文档,还是没看太懂。。。
当时我真的觉得有点懵了。。。心想今天算了还是不想这个,明天再想,于是我去把demo
的网关换成了spring cloud gateway
,这个基本没有半个小时就搞定了,还是比较简单的
第二天也就是今天,我再次来看了哈文档,百度的几篇文章除了说明了一点,要加一个配置文件bootstrap.yml
,这里面要去指定一些spring cloud consul config
的一些配置,并且意思感觉是application.yml
里的配置都可以不用写了,完全维护在spring cloud consul config
里,但是spring cloud consul config
到底在哪,我还是无法把需要配置的属性,application.yml
和consul agent
里刚一片空白的配置页面,这三者联系起来
终于无意中,我发现有一篇文章的一句话让我警醒了。。。他不是像其他文章说一些貌似大家都懂的话,而是非常郑重了说了一句
感觉这难道也是一个理解能力和我差不多,但是比我强的人么。。。他这么一句让我明白,确实官网说的也不太明白,最后那句体会一下,我再去反复看了文章,和自己试验。。。
终于懂了。。。
懂了之后再回过头来看,spring cloud consul config
还是真的真的非常简单的。。。其实就是想要用spring cloud consul config
,你要和它的一些约定或者说它的规范匹配起就完事了,剩下就跟普通的配置文件一样了,接下来我用我自己的理解来说明哈spring cloud consul config
怎么使用,当然前提你对于服务治理consul
有点点了解哈
spring cloud consul config
其实就是一个服务的配置中心,配置统一管理的地方,你哪个服务需要这个配置中心,你就在那个服务里加上依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-config</artifactId></dependency>
之后在该服务的resources目录下新增一个bootstrap.yml
文件,里面加上这些就够了
spring: cloud: consul: config: format: yaml default-context: gateway
format
默认是key_value
的形式,但是我现在很喜欢用yaml
形式的配置文件,default-context
根据你的应用取吧,类似与spring.application.name
属性一样,区分服务的
完事之后,在consul agent
刚那个页面里创建一个目录,对,是目录,目录名一定要像这样config/gateway/data
也就是config
和data
目录都是默认值,你没有配置的时候,就不用管,但是你必须这么写,中间那个gateway
就是刚那个 default-context
,这样consul agent
页面和bootstrap.xml
就映射起来了,接下来你就可以在下面的value
里像yaml
文件一下写配置了
当然你想改目录的两个默认值,你就可以这么修改了,对应prefix
和data-key
,把默认值写出来就一眼清楚了
spring: cloud: consul: config: format: yaml default-context: gateway prefix: config data-key: data
所以还是简单的,当然还有个问题,要是多个环境的不同配置怎么来的,嘿嘿,这是个关键问题,因为这个处理,让我实在没有想到,一般我们不用配置中心的时候,在工程里配置,可以按照application-test.yml
和application-prod.yml
来区分环境,这个spring cloud consul config
也是可以的,不过不是创建config/gateway/data/test
,亦或是config/gateway/data/prod
这种。。。天真
特么竟然是config/gateway,test/data
和config/gateway,data/data
,没错,你没有看错,服务名和环境中间用逗号分开。。。
而且这个中间分隔符逗号还是支持可配。。。默认是逗号。。。你还可以用属性profile-separator
进行修改
spring: cloud: consul: config: format: yaml default-context: gateway prefix: config data-key: data profile-separator: ','
可能我是一个比较传统的程序猿。。。这种逗号分开的目录命名方式对我来说还是有点冲击的。。。再回过头看官方的文档,也算是有点明白了。。。真的还是我的理解能力太差
总得来说也是怪自己太着急了。。。之前几个开箱即用的把自己搞的浮躁了点。。其实仔细看文档还是能看明白的。。。
最后你可以像平常写配置文件一下,这么根据环境来配置了