分布式配置中心Config整合使用

Config的作用

    Config是分布式配置中心,用来集中管理微服务的配置文件,一般情况下,应用的配置文件是放在项目中的,修改了之后需要重新启动,但是在微服务架构中,虽然应用的配置文件不如mvc那么多,但是随着服务数量的增加,每个服务都有自己的配置文件,按照一般的方法需要逐个修改重启,相当麻烦,通过Config可以将这些配置文件统一管理起来,并且可以动态刷新配置,不需要重启。

    注意,Config虽然是可以管理配置文件,但是服务应用中还是需要有最低限度的配置的,例如服务的命名,指定注册中心等配置是至少要有的,否则服务根本起不来,一般来说只需要将相对灵活的部分配置放在Config中进行管理即可。

 

Config的原理

    Config作为配置中心必然存在一个存放配置的地方,在Config中是使用版本控制器进行存放的,也就是git或svn,这里以git为例,config本身是没有后台界面可以操作的,要修改配置就只能通过git或者svn的可视化软件或者命令来操作。

    Config里面分为服务端和客户端,服务端负责从git中拉取配置文件,客户端再从服务端中获取,一般来说客户端不直接从git上面拉取配置,因为客户端是会有多个的,服务端只需要一个即可,而且每次都从git上面拉取的话速度也比较慢,获取配置的流程如下:

    1.服务端从git拉取最新的配置文件,缓存到本地

    2.客户端从服务端中请求需要的配置文件,缓存到本地

    3.如果使用了监视器刷新(下面提到),可以通过手动刷新,刷新实际上是重构对应的bean,否则需要重启服务

   这里要注意的是虽然服务端和客户端在获取配置文件之后都会放入缓存,但实际上每次访问服务端上的配置文件时都是最新的,会跟git进行同步,但是客户端放入缓存之后是不会自动刷新的,所以git上面修改了配置是不会在客户端中生效的。

 

Config服务端

    服务端主要负责与git同步,搭建有几步:

1.添加依赖,服务端也是一个服务

        <!--spring-cloud 整合 config-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <!-- SpringBoot整合eureka客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2.application.yml中配置读取的git地址,如果仓库是私人的则需要配置username和password,公开的不用,另外要指定搜索的目录,多个的话用逗号分割

spring:
  #配置读取的git地址
  cloud:
    config:
      server:
        git:
          ###git环境地址
          uri: https://gitee.com/kinghmj/spring-cloud-config.git
          #username: 用户名
          #password: 密码
          ####搜索目录,多个的话用逗号分割
          search-paths:
            demo-zuul
      ####读取分支
      label: master

3.启动类,@EnableConfigServer开启Config服务端功能

@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class ConfigServerApplication {
    public static void main(String[] args){
        SpringApplication.run(ConfigServerApplication.class,args);
    }

}

      配置好了之后可以直接访问到git上面的配置,直接输入ip+端口+配置文件+显示格式(localhost+8085+eureka-zuul-dev+.yml)就可以看到配置的内容,这就代表服务端搭建成功.

    这里有一个小小的坑,就是配置文件的命名请务必遵循 “客户端服务名-环境” 的格式命名,否则可能会访问不到,例如这里的客户端是eureka-zuul,环境是dev环境,配置文件命名就是eureka-zuul-dev。

 

Config客户端

      客户端其实就是其他普通的服务,只是在原有基础上加上客户端功能而已,

1.添加客户端依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
        <!--Spring Boot Actuator,感应服务端变化-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

2.配置服务端的信息,这里注意一个坑爹的东西,一般来说springboot就只需要application.yml一个配置文件就可以了,但是下面这个config的配置信息放在applicaiton.yml的时候客户端读取不到配置,不起效,要放在bootstrap.yml中才可以,bootstrap.yml会比application.yml先加载,一般用来放一些基本不变的配置类信息,详情看https://www.cnblogs.com/BlogNetSpace/p/8469033.html的分析说明

#zuul路由通过config配置
spring:
  #配置config服务器
  cloud:
      config:
      ####读取后缀
        profile: dev
        ####读取config-server注册地址
        discovery:
          service-id: config-server
          enabled: true

#开启监控断点
management:
  endpoints:
    web:
      exposure:
        include: "*"

3.以zuul为例,启动类中加上配置信息,@RefreshScope表示开启刷新功能,@ConfigurationProperties可以将相关的配置信息封装在类里面

    @RefreshScope
    @ConfigurationProperties("zuul")
    public ZuulProperties zuulProperties(){
        return new ZuulProperties();
    }

 

利用bus消息总线动态刷新

1.服务器端加上bus依赖

        <!--Spring cloud整合bus消息总线-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

2.服务器端配置rabbitmq服务器信息

#设置rabbitmq地址
spring:
  rabbitmq:
      host: localhost
      port: 5672
      username: guest
      password: guest


#开启监控断点
management:
  endpoints:
    web:
      exposure:
        include: "*"

3.客户端加上bus依赖,跟第一步是一样的

4.客户端配置rabbitmq服务器信息

#设置rabbitmq地址
spring:
  rabbitmq:
      host: localhost
      port: 5672

5.git更新后通过以post请求方式调用/actuator/bus-refresh接口进行更新,注意这里调用的是服务端的,跟不是客户端,服务端会通过所有订阅了的客户端进行更新

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值