最近公司想让我看看微服务

正好我也想看看新东西,天天解决业务问题。。。太没有激情了。。。而且我们大多应用都还是springmvcspringboot的应用都很少,只有几个,唉,我也是深陷业务问题中

Spring Cloud也算是一个全家桶吧,里面东西也多,不过从感觉开箱即用的原则来看,用起来也比较顺手,demo也都很好搭建,
从开始的网关+服务的着手,网关我采用的Zuul,服务治理采用的eureka,后面想用spring cloud config作为配置中心,但是还要自己搭一个server很是麻烦。。。我也懒。。。无意听同事说,其实全家桶里服务治理可以用spring cloud consul,而consul就自带一个配置功能,于是我去了解了spring cloud consul config
spring cloud consul config本身依赖spring cloud consulagent 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.ymlconsul 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

也就是configdata目录都是默认值,你没有配置的时候,就不用管,但是你必须这么写,中间那个gateway就是刚那个 default-context,这样consul agent页面和bootstrap.xml就映射起来了,接下来你就可以在下面的value里像yaml文件一下写配置了

当然你想改目录的两个默认值,你就可以这么修改了,对应prefixdata-key,把默认值写出来就一眼清楚了

spring:  cloud:    consul:      config:        format: yaml        default-context: gateway        prefix: config        data-key: data

所以还是简单的,当然还有个问题,要是多个环境的不同配置怎么来的,嘿嘿,这是个关键问题,因为这个处理,让我实在没有想到,一般我们不用配置中心的时候,在工程里配置,可以按照application-test.ymlapplication-prod.yml来区分环境,这个spring cloud consul config也是可以的,不过不是创建config/gateway/data/test,亦或是config/gateway/data/prod这种。。。天真

特么竟然是config/gateway,test/dataconfig/gateway,data/data,没错,你没有看错,服务名和环境中间用逗号分开。。。

而且这个中间分隔符逗号还是支持可配。。。默认是逗号。。。你还可以用属性profile-separator进行修改

spring:  cloud:    consul:      config:        format: yaml        default-context: gateway        prefix: config        data-key: data        profile-separator: ','

可能我是一个比较传统的程序猿。。。这种逗号分开的目录命名方式对我来说还是有点冲击的。。。再回过头看官方的文档,也算是有点明白了。。。真的还是我的理解能力太差

总得来说也是怪自己太着急了。。。之前几个开箱即用的把自己搞的浮躁了点。。其实仔细看文档还是能看明白的。。。

最后你可以像平常写配置文件一下,这么根据环境来配置了

总结哈:戒骄戒躁吧。。。