Config分布式配置中心(在Spring Cloud整合Config(idea19版本))

文章介绍了如何使用SpringCloudConfig构建分布式配置中心,包括ConfigServer的设置,如注册到Eureka,配置Git仓库,以及ConfigClient的使用,如何从服务端获取配置。同时,文章提到了配置的动态更新,通过发送POST请求到/actuator/refresh接口实现配置的实时刷新。
摘要由CSDN通过智能技术生成

应用场景
    1.集中配置管理(一处修改,处处生效)
    2.不同环境不同配置(开发dev,测试test,生产prod)
    3.运行期间可动态调整
    4.如果配置内容发生变化,微服务可以自动更新配置

分布式配置管理
    Server:提供配置文件的存储、以接口的形式将配置文件的内容提供出去,通过使用@EnableConfigServer注解在Spring Boot应用中实现非常简单的嵌入
    Client:通过接口获取配置数据并初始化自己的应用

创建config的服务端

        1.创建一个config的项目

 

 

 

        2.导入jar包

<dependencies>
        <!-- Eureka Client客户端依赖引入 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
        <!-- Config配置中心服务端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
    </dependencies>

        3.创建启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.config.server.EnableConfigServer;

@EnableConfigServer//开启config服务端的功能
@EnableDiscoveryClient//开启Eureka客户端的功能
@SpringBootApplication
public class ConfigApplication9400 {
    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication9400.class,args);
    }
}

 

        4.创建配置文件

        到服务中心注册:application.properties

server.port=9400
eureka.client.service-url.defaultZone= http://LEQCloudEurekaServerA:9200/eureka,http://LEQCloudEurekaServerB:9201/eureka
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ipaddress}:${spring.application.name}:${server.port}:@project.version@


spring.application.name=leq-service-config

        配置配置信息application.yml

spring:
  cloud:
    config:
      server:
        git: #用于配置git仓库信息   uri,用户名,密码,分支
          uri: git仓库的https地址
          username: git账户的昵称
          password: git账户的登录密码
          search-paths:
            - spring-cloud-config # 仓库的名称
      label: master #读取的分支

         4.重启config的项目,在浏览器访问以下地址

http://localhost:9400/master/application-dev.yml

        可以看大我们在git上面上传的文件,将这个项目作为 config的服务端

创建config的服务端

        1.在page项目下导入依赖

      <!-- Config配置中心客户端 -->    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-client</artifactId>
    </dependency>

        2.创建config的客户端调用类

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("config")
public class ConfigController {
    @Value("${mysql.user}")
    private String mysqlUser;
    @Value("${person.name}")
    private String personName;
    
    @RequestMapping("getConfig")
    public String getREmoteConfig(){
        return "mysql.user:"+mysqlUser+",person.name:"+personName;
    }
    
}

        3.创建配置文件bootstrap.yml

server:
  port: 9100

spring:
  application:
    name: leq-service-page
  datasource:
    url: jdbc:mysql://192.168.117.130:3333/qf_sc?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: 0216
  cloud:
    config: #config客户端配置和ConfigServer通信,并告知ConfigServer希望获取的配置信息在哪个⽂件中
      name: application
      profile: dev # 后缀名称
      label: master # 分⽀名称
      uri: http://localhost:9400 # ConfigServer配置中⼼地址

eureka:
  client:
    service-url: # Eureka Server的路径
      defaultZone: http://LEQCloudEurekaServerA:9200/eureka,http://LEQCloudEurekaServerB:9201/eureka
  instance:
    # 使⽤ip注册,否则会使⽤主机名注册(此处考虑到对⽼版本的兼容,新版本经过实验都是ip)
    prefer-ip-address: true
    # ⾃定义实例显示格式,加上版本号,便于多版本管理,注意是ip-address早期版本是ipAddress
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@ 
hystrix: 
  command:
    default:
      circuitBreaker:
        # 强制打开熔断器,如果该属性设置为true,强制断路器进入打开状态,将会拒绝所有的请求,默认false关闭的
        forceOpen: false
        # 触发熔断错误比例阈值,默认值50%
        errorThresholdPercentage: 50
        # 熔断后休眠时长,默认值5秒
        sleepWindowInMilliseconds: 3000
        # 熔断触发最小请求次数,默认值是20
        requestVolumeThreshold: 2
      execution:
        isolation:
          thread:
            # 熔断超时设置,默认为1秒
            timeoutInMilliseconds: 2000


# Spring Boot中暴露健康检查等断点接⼝
management:
  endpoints:
    web:
      exposure:
        include: "*"
  # 暴露健康接⼝的细节
  endpoint:
    health:
      show-details: always

# 针对的被调⽤⽅微服务名称,不加就是全局⽣效
qf-service-product:
  ribbon:
    # 请求连接超时时间
    ConnectTimeout: 2000
    # 请求处理超时时间
    ReadTimeout: 10000
    # 对所有操作都进⾏重试
    OkToRetryOnAllOperations: true
    #
    MaxAutoRetries: 0 # 对当前选中实例重试次数,不包括第⼀次调⽤
    MaxAutoRetriesNextServer: 0 # 切换实例的重试次数
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载策略调整

# 开启Feign的熔断功能
feign:
  hystrix:
    enabled: true # true 开启Feign中继承Hystrix 熔断器功能
  compression:
    request:
      enabled: true # 默认不开启
      mime-types: text/html,application/xml,application/json # 设置压缩的数据类型,设置为默认值
      min-request-size: 2048 # 设置触发压缩的⼤⼩下限,2048为默认值
    response:
      enabled: true # 默认不开启

        4.重启page项目,访问刚刚写的接口,可以看到数据,但是我们在git修改完数据后,并不会实时更新,只有服务类更新了,这就需要我们在添加一个注解     

 

 

             5.实现实时刷新 

                1)在配置文件中添加暴露健康检查断点的配置

management:
  endpoints:
    web:
      exposure:
        include: "*"

                2)添加注解   @RefreshScope//手动刷新(获取最新的Config Server中的数据)

        6.重启page项目,更改git文件中的内容并重新访问接口

         然后我们访问刚刚的接口发现并没有更新,这是因为要更新还需要添加一个触发条件,注意该请求必须是post请求

http://localhost:9100/actuator/refresh

        当发送完该请求后我们就会惊奇的发型我们的文件实时更新了,是不是很神奇,这是手动更新,下一篇我们将介绍如何进行自动更新

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值