springcloud之config配置中心搭建

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

在使用springcloud做项目,我们会把原有的各个模块需要拆分成多个服务,服务数据数量多,且很多的配置内容重复,且维护的代价太高。比如修改数据库的ip,修改了某个中间件的ip,这就需要修改每个涉及到这个配置的服务,可想而知需要做多少的重复工作,而且手动修改还十分容易出错。 使用配置中心就可以让维护人员只修改一个地方(一般是使用git),并主动通知对应的服务,取更新拉取最新的配置。

1.配置中心架构图

在这里插入图片描述

2.流程说明

各个服务的配置信息,统一集中在git仓库进行管理,并创建一个config-server服务作为"中间人",来处理服务和git之间的关系,消息总线用在动态更新时使用,这里使用rabbitmq。 1.当服务启动时候,会取config-server获取服务所需的配置信息 2.config-server会主动取git仓库拉取最新的配置,并缓存在本地仓库中 3.服务得到最新配置后,也会将配置加载到本地进行缓存,并加载初始化工作,最后启动服务

3.消息总线

只要服务没有进行重启,服务会运行期间都是回去的本地配置缓存,若此时修改了git仓库中的配置信息,如何及时通知到对应的服务并更新服务配置呢?这时候消息总线就起到了作用。 配置中心提供了一些动态刷新配置的接口,当我们修改了git配置,调用对应的接口,即可刷新对应服务的配置信息,当然前提是各服务,config-server连接的是同一个rabbitmq地址,因为消息的通知是通过mq队列处理的。

4.配置中心搭建

1.创建项目子模块config-server,添加依赖

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-bus-amqp</artifactId>
		</dependency>

启动类添加注释 @EnableEurekaClient @EnableConfigServer 主要是配置注册中心eureka客户端,配置中心config-server服务端,还有rabbitmq消息总线

2.配置文件 <1>创建bootstrap.yml文件

server:
  port: 8762
spring:
  application:
    name: config-server
  profiles:
    active: @spring.active@

  cloud:
    bus:
      enabled: true
      trace:
        enabled: true
    config:
      name: spring-admin,rabbitmq
      server:
        git:
          uri: git地址     # 配置git仓库的地址
          username: 账号                                        # git仓库的账号
          password: 密码                                  # git仓库的密码
          searchPaths: /*,/*/*,/*/*/*
          clone-on-start: true
          force-pull: true
          repos:
            xxx:
              pattern: xxx*
              uri: git地址
              searchPaths: /*,/*/*,/*/*/*
              clone-on-start: true
              force-pull: true
management:
  endpoints:
    web:
      base-path: /
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS

这里配置了两个仓库地址,供两个项目一起使用,如果只要一个项目,删除内层repos节点即可

简单说明下几个节点的含义:

spring.cloud.config.name:表示需要拉取配置文件的前缀,下面会讲到规则 searchPaths:表示需要在git仓库扫描的路径 force-pull:表示强制拉取,可以防止本地文件修改导致更新失败

<2>添加application文件 在这里插入图片描述 这里配置了不同环境的配置文件,每个都是配置了rabbitmq的信息,主要是为了消息总线使用

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: xxxx
    password: xxxx

5.客户端搭建

1.添加依赖

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

2.客户端服务新建配置文件bootstrap.yml

server:
  port: 8060
spring:
  application:
    name: xxx #服务名称
  profiles:
      active: @spring.active@
  cloud:
    bus:
      enabled: true
      trace:
        enabled: true
    config:
      fail-fast: true
      name: xx1,xx2,xx3
      enabled: true #开启配置
      profile: @spring.active@  #版本
      label: master #git配置的分支信息,master类似的
      discovery:
        enabled: true
        service-id: config-server

当然也需要在application.yml文件中配置mq信息和其他自己所需的信息 简单说明下几个节点的含义:

label:拉取git那个分支信息 service-id:配置中心服务名,通过注册中心来管理调用信息

6.加载规则说明

git配置文件存在形式,根目录为不同的类型的目录,例如rabbitmq,mysql等,以下为rabbitmq目录下的文件列表 在这里插入图片描述

各个微服务加载git上的配置文件,默认加载的文件名规则为:应用名称-环境变量.yml # s p r i n g . a p p l i c a t i o n . n a m e {spring.application.name}- {spring.cloud.config.profile}-${spring.cloud.config.label} 当然我们也可以自定义应用名称前缀,name包含多个值,用逗号分隔 在这里插入图片描述 若profile的值为dev,则加载的配置文件为feign-hystrix-dev.yml,db-dev.yml等 配置客户端每次在启动的时候,会加载服务端的配置文件。

7.动态刷新配置

问题1:修改git配置文件,不重启任何应用的情况下,重新加配置文件? 使用postman工具,发送post请求,请求地址为: 1.重新加载所有应用配置信息:http://{config-server-ip}:8762/bus-refresh {config-server-ip}表示服务配置端ip 如果存在多个配置服务端,该刷新方式也会同时刷新其他配置服务端 2.重新加载单个应用的配置信息:http://{config-server-ip}:8762/bus-refresh/{destination} {destination}表示某个客户端应用名称 例如common-invoice-service

问题2:查看此时配置服务端的所加载到的配置文件 Url访问地址:http://config-server的IP地址:8762/{label}/{filename} {label}表示git分支,例如master {filename}表示文件名称,例如feign-hystrix-dev.yml

8.启动顺序

首先启动eureka注册中心,其次启动config-server配置中心,最后到各个不同的服务,因为所有的服务都依赖与这两个服务,否则无法正常启动。启动日志看到拉取信息说明成功 在这里插入图片描述

猜你喜欢

转载自juejin.im/post/7114468684373966862