SpringCloud搭建高可用配置中心Config--动态刷新bus/refresh

第一步:先在自己springcloud项目基础上,新加一个子服务(spring-cloud-config配置中心--服务端),加入依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</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-sleuth-zipkin-stream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>

        <!-- amqp -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <!-- actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
    </dependencies>

添加application.properties配置:

#服务注册与发现
eureka.client.serviceUrl.defaultZone=http://server:8030/eureka/,http://server1:8029/eureka/
#链路追踪注册发现
spring.zipkin.base-url=http://localhost:9411

spring.application.name=spring-cloud-config
server.port=7001

spring.cloud.config.server.git.uri=https://gitee.com/****/springcloudconfig
spring.cloud.config.server.git.search-paths=config-repo
spring.cloud.config.server.git.username=****
spring.cloud.config.server.git.password=****

#rabbitmq配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=****
spring.rabbitmq.password=****

#动态刷新配置 ---需要忽略权限拦截
management.security.enabled=false

在ConfigApplication.java启动类上加上注解:

@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigApplication {

	public static void main(String[] args) {
		SpringApplication.run(ConfigApplication.class, args);
	}
}

至此,配置中心--服务端搭建完毕


第二步:将其他子项目改进成配置中心--客户端(Config-client)

添加依赖:

<!-- config -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!-- 动态刷新配置
      更新了Git仓库中的配置文件,那如何让config-client能够及时感知到呢?
      动态刷新配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

然后将配置文件名称由application.properties改为→bootstrap.properties,添加配置(从配置中心服务端获取数据的配置):

#获取配置
#spring.cloud.config.label=master
spring.cloud.config.profile=test
spring.cloud.config.discovery.service-id=spring-cloud-config
spring.cloud.config.discovery.enabled=true
#动态刷新配置
spring.cloud.bus.refresh.enabled=true
#动态刷新配置 ---需要忽略权限拦截
management.security.enabled=false
#配置重试机制
spring.cloud.config.retry.initial-interval=2000
spring.cloud.config.retry.max-attempts=2000
spring.cloud.config.retry.max-interval=2000
spring.cloud.config.retry.multiplier=1.2
spring.cloud.config.fail-fast=true

将客户端的application.java启动类上加上注解:

@EnableDiscoveryClient

至此:客户端的配置,将也会从配置中心--服务端指定的git地址去拿,例如我的配置中心--客户端service-id=spring-cloud-zuul

至此,如果修改配置,在发一个post请求:localhost:8080/refresh,配置将会更新。

但是没有达到预期,也就是不需要手动去发请求,而是修改配置就能够应用。


划重点:怎么实现全自动更新配置呢?

第一步:去git仓库https://gitee.com/****/springcloudconfig/***,进入仓库管理:

添加webHooks:

这样,当修改配置后,git会自动发请求去你指定的公网的/bus/refresh实现动态刷新配置了。

猜你喜欢

转载自blog.csdn.net/qq_31122833/article/details/81095766