Springcloud统一配置中心

为什么需要统一配置中心

  1. 不方便维护
  2. 配置内容安全与全新
  3. 更新配置需要重启

看一下统一配置中心的结构图
统一配置中心1

首先IDEA创建项目,勾选的依赖还是需要eureka-client的,另外还需要config-server。
在config server的依赖中一共有一下几个:

<dependencies>
        <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-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-monitor</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
    </dependencies>

因为是远端git,所以我在gitee上创建项目,并在在项目中创建几个配置文件:

统一配置中心2

order.yml

统一配置中心3

就是把之前项目本地的配置copy到git上

接着我们到config-server的配置文件中配置:

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/Csea/config-repo
          username: {gitee的账号}
          password: {gitee的密码}
#          basedir: D:\SpringProject\SpringCloud\config\basedir  #这个就是会把远端git的配置文件拉下来放在指定的路径
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

因为配置中心是要给其他的服务调用的,所以也是需要去注册中心去注册。

在config-server的启动类上加上,不用说你也能明白,跟注册中心是一个套路

@EnableEurekaClient
@EnableConfigServer

接着启动项目,在浏览器中输入:http://localhost:8080/order-test.yml

统一配置中心4

你就可以读取到在gitee上的配置文件了,这里我输入order-test并不只是单一的读取这份配置文件,而是他会将order.yml和order-test.yml两个文件进行合并,而且访问是有他自己的一个访问规则的,如图。两种方式皆可,你也可以用order-a.yml进行访问,也是可以成功访问到配置文件滴。
PS:你也可以不是yml后缀,.json或者.properties都是可以的,他会自动帮我们进行转换

统一配置中心5

之后在实际的生产过程中,可能会有很多的配置文件,这时候就需要有分支了,不然的话一堆配置文件在同一级目录下,看着都很烦,不利于维护。当我们创建了分支之后,需要在项目中访问不同分支的配置文件,我们就需要在配置文件中加入:

cloud:
    config:
      server:
        git:
	  search-paths: /** #指定搜索根路径下的所有目录,若有多个路径使用逗号隔开

接着,我们来到config-client项目中,同理引入依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-config-client</artifactId>
</dependency>

注册中心的东西我就不说明了,只说关于配置中心的

引入了依赖之后,我们进行配置

spring:
  application:
    name: order
  cloud:
    config:
      discovery:
        enabled: true
        service-id: CONFIG # 注册中心的服务名
      profile: test # 指定配置文件的环境

配置完成之后,我们创建一个接口,去进行测试访问

统一配置中心6

启动项目在浏览器中输入:http://localhost:8081/env/print

这时候你会发现获取不到,这是因为我们需要修改配置文件的名称,把application修改为bootstrap,这样在springboot项目启动的时候就会优先启动配置文件了,好了,我们继续访问一下刚才的那个地址

统一配置中心7

config-server也是一个微服务,让他高可用也是很简单,只需要启动多个服务实例就可以了,直接复制几分配置文件,分配不同的端口即可

统一配置中心8

启动之后就可以在eureka注册中心看到CONFIG有3个注册了

需要注意的是,8761是eureka的默认端口,比如开设8762,8763等其他端口的时候,在远端git的配置中心上原本是有eureka的配置的,但是因为开设了8762等其他端口,他就配置中心地址,就会去打开localhost:8888默认地址去进行寻找,这样的解决办法就是把配置中心上的eureka注册地址给copy到项目自身的配置文件上去,也就是把远端配置文件的eureka配置放回到项目中去。

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

经过了配置中心的server\client,以及拉去配置文件的操作之后,接下来我们就要通过Spring Cloud Bus来实现配置文件的自动刷新

先来看一下结构图

统一配置中心9

Spring Cloud Bus会向外提供一个http接口,即图中的/actuator/bus-refresh。我们将这个接口配置到远程的git上,当git上的文件内容发生变动时,就会自动调用/bus-refresh接口。Bus就会通知config-server,config-server会发布更新消息到消息队列中,其他服务订阅到该消息就会信息刷新,从而实现整个微服务进行自动刷新。

在此之前,我们需要安装rabbitMQ,当然其他的消息中间件也是可以的,kafaka,activeMQ。我这里是通过docker去安装的rabbitMq,安装docker的话自行百度吧,如果是win10家庭版就可以参考我之前的文章

Win10家庭版安装Docker

启动docker之后,cmd运行命令:docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.7.3-management

3.7.3-management是图形化的版本

安装完成之后可以在浏览器中输入http://localhost:15672进行访问了,默认账号密码都是guest

统一配置中心10

完成以上操作之后,就可以在项目中引入依赖,server和client都需要引入

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

当项目启动之后,就可以看到在rabbitMq上已经注册上去了(server和client)

统一配置中心11

现在我们就要开始实现,修改了远端的配置文件之后实现自动更新

修改远端的配置文件之后,我们打开cmd命令工具输入命令:curl -v -X POST "http://localhost:8080/actuator/bus-refresh

这接口是必须用POST调用的,执行之后就可以刷新一下刚刚写的接口,你会发现你修改的配置内容已经修改过来了,这里我就不再具体放截图了。

当然啦,我们每次这样手动的输入POST命令很不方便!git提供了WebHook来帮助我们,首先在config-server引入依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-config-monitor</artifactId>
	<version>2.1.0.RELEASE</version>
</dependency>

在GitHub仓库里设置WebHook,之前都是以json格式的,但是随着monitor依赖的更新,也改变了配置,这个地方坑了我很久,查了很久的资料。

统一配置中心WebHook-github

gitee上的配置如下

统一配置中心WebHook-gitee

配置完毕之后就可以随意的修改远端的配置文件啦~然后刷新client端的接口,就会发现配置已经更新过来了。

我以gitee为例
修改前:

统一配置中心12

修改后:

统一配置中心13

当你在远端提交之后来到config-server的rabbitMq的队列中查看,你会发现有数据过来了

统一配置中心14

与此同时,在config-client的客户端中也会有相应的日志打印

统一配置中心15

实现的效果图

统一配置中心16

到此为止就结束了~~当然还有很多坑,比如引入最新的spring-cloud-config-monitor依赖就不会更新配置,这个后面有时间还要看一下怎么处理,也是网上看了一个博主的引入版本,然后试了一下,竟然实现了!

补充:这里配置到git的域名是通过natapp工具镜像本地映射的,大家可以自行去他官网看一下使用说明,也是有免费的可以使用的~
https://natapp.cn/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值