栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spring Cloud Config配置管理中心实践

Spring Cloud Config配置管理中心实践

1、配置中心服务端

1.1、创建config配置中心服务端工程,同时使用默认git作为存储方式。

添加依赖,pom文件如下



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.4.9
         
    
    com.kkb
    Config
    0.0.1-SNAPSHOT
    Config
    Config
    
        UTF-8
        UTF-8
        11
        2020.0.3
    
    
        
            org.springframework.cloud
            spring-cloud-config-server
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.cloud
            spring-cloud-starter-bus-amqp
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        

    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        
    


1.2、在启动器中使用@EnableConfigServer启用ConfigServer,并使用注解@EnableDiscoveryClient来激活注册中心的客户端

 1.3、配置中心服务端完整的application.yml文件

server:
  port: 9006
spring:
  #自动推送配置文件的配置1
  rabbitmq:
    host: 127.0.0.1
    port: 5672 #不是15672,这个是管控台,这里是5672
    username: guest # 默认就是guest,可以不配置
    password: guest # 默认就是guest,可以不配置
    #  profiles:
  #    active: native #默认是从git上读取,不加这个就是从git上读取,加了就是从本地读取
  application:
    name: cloud-config
  #配置中心服务端
  cloud:
    config:
      server:
        #从本地读取配置
        #native:
          #search-locations: classpath:/config_repo
        git:
          uri: https://gitee.com/zhang-wuming/my-config.git #配置文件所在的git仓库
          username: zhang-wuming #如果是公开的仓库就不需要用户名和密码
          password: 2649891840Zhang
          search-paths: bill #配置文件所在目录
          default-label: master #配置文件分支,如果默认分支是master也可以不用配
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9004/eureka #向注册中心eureka注册
  #自动推送配置文件的配置2
management:
  endpoints:
    web:
      exposure:
        include: bus-refresh
  endpoint:
    bus-refresh:
      enabled: true

到此配置中心服务端就完成了,接下来就是准备配置中心客户端

2配置中心客户端

2.1、在客户端的微服务中添加依赖


            org.springframework.cloud
            spring-cloud-starter-config
       

2.2、在配置文件中添加

spring:
  application:
    name: cloud-payment-service

  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest # 默认就是guest,可以不配置
    password: guest # 默认就是guest,可以不配置
#配置springcloud config client  配置中心客户端
  cloud:
    config:
      uri: http://localhost:9006
      profile: default
      label: master
  config:
    import: optional:configserver:http://localhost:9006

  • pring.config.import=optional:configserver:http://localhost:9006,指定Spring Boot项目从Config Server导入配置
  • spring.cloud.config.url:Config Server地址,默认localhost:8888
  • spring.cloud.config.profile:为git配置文件的后缀
  • spring.cloud.config.label:为访问git的分支。

    到此配置中心客户端也完成了。

    其中Spring Cloud Config 有它的一套访问规则,通过这套规则在浏览器上直接访问就可以。

    比如

    {application}-{profile}.yml
    {label}/{application}-{profile}.yml

  • application} 就是应用名称,对应到配置文件上来,就是配置文件的名称部分,例如我上面创建的配置文件。
  • {profile} 就是配置文件的版本,我们的项目有开发版本、测试环境版本、生产环境版本,对应到配置文件上来就是以
  • application-{profile}.yml 加以区分,例如application-dev.yml、application-test.yml、application-prod.yml。
  • {label} 表示 git 分支,默认是 master 分支,如果项目是以分支做区分也是可以的,那就可以通过不同的 label 来控制访问不同的配置文件了。

          案例中的配置服务名为cloud-payment-service(spring.application.name=cloud-payment-service),那么我们访问的就是my-config: 配置中心微服务这个git仓库下config目录下的application.yml(所有服务重用)、cloud-payment-service.yml、cloud-payment-service-default.yml,这三个配置文件的内容,在这三个文件具有相同配置的情况下,后面的配置会覆盖前面的配置,也就是说cloud-payment-service-default.yml优先级是最高,如果有相同配置是以这个文件为主,cloud-payment-service.yml优先级是其次。

    例如application.yml里保存了

    key1: v1
    key2: v2
    key3: v3

    cloud-payment-service.yml保存了

    key2: value2

    cloud-payment-service-default.yml里保存了

    key3: value3

    那么最终的配置是这三个文件的整合

    结果就是

    key1: v1
    key2:value2
    key3:value3

    3、本地存储配置数据

    在前面的配置中使用的是gitee远程存储的配置,虽然git存储配置数据非常方便,但是在项目开发阶段,使用git存储还是很不方便,Spring Cloud Config支持多种配置存储方式,比如默认的git,还有本地文件存储,JDBC,Redis等存储方式,这里介绍下本地文件存储,其他存储方式,参考官方文档。

    3.1配置文件

    在Config Server配置文件application.yml中,配置如下。

    spring:
      profiles:
        active: native
      cloud:
        config:
          server:
            native:
              search-locations: classpath:/config_repo

  • spring.profiles.active=native:表示使用本地配置存储
  • spring.cloud.config.server.native.searchLocations:指定配置文件所在路径,可以使用相对路径比如classpath 4、配置自动刷新

           Spring Cloud Config在项目启动时自动加载配置内容这一机制,导致了他的一个缺陷,配置不能自动刷新,在上述案例中,修改git仓库中的key1的值"key1=v11",发现支付服务得到的配置项key1的值还是旧的配置内容,新的内容不会自动刷新过来,在微服务架构中,动辄上百个节点如果都需要重启,这个问题非常麻烦

    我们可以使用Spring Cloud Bus和Spring Boot Actuator实现自动刷新,实现原理如图。

     4.1启动RabbitMQ,RabbitMQ默认的用户名和密码都是guest

    4.2在配置中心服务端 添加依赖

    
                org.springframework.cloud
                spring-cloud-starter-bus-amqp
            
    
            
                org.springframework.boot
                spring-boot-starter-actuator
            
    

    4.2 配置文件

    在application.yml中配置连接RabbitMQ,同时配置暴露/actuator/bus-refresh端点,代码如下

    spring:
      rabbitmq:
        host: 192.168.56.110
        port: 5672
        username: guest
        password: guest
    management:
      endpoints:
        web:
          exposure:
            include: bus-refresh
      endpoint:
        bus-refresh:
          enabled: true    

    4.3 配置中心客户端

    添加依赖

     
                org.springframework.cloud
                spring-cloud-starter-bus-amqp
            

    配置文件中,在application.yml中配置连接RabbitMQ

    spring:
      application:
        name: cloud-payment-service
      rabbitmq:
        host: 192.168.56.110
        port: 5672
        username: guest
        password: guest

    4.4 在对应的controller中添加注解@RefreshScope

    使用@RefreshScope注解刷新更改的配置,代码如下。

     4.5启动测试

    启动Eureka、Config Server、支付微服务(Config Client),修改git仓库中的配置项内容后,使用Postman发送POST请求给/actuator/busrefresh(注意是是POST类型),再次访问支付服务,发现配置项已经自动刷新,请求响应是203,请求成功但没有返回内容

    源码https://gitee.com/zhang-wuming/springcloud

     

     
    

    

  • 转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/758077.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号