Spring Cloud 配置中心采用bus(消息总线)自动刷新集群配置

spring boot版本:2.1.10.RELEASE
spring cloud版本:Greenwich.SR4

一、从客户端刷新

在这里插入图片描述
以下所有配置均针对客户端,并在 微服务搭建Spring Cloud配置中心【客户端】 的基础上新增(这里贴出的配置都是完整版,但不再详细解释)。

添加依赖

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

<!--利用spring boot的refresh 使git中的配置动态生效-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<!--支持rabbitmq和kafka-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

添加配置

bootstrap.properties 中添加配置

spring.application.name=ebook-config-client-bus
server.port=9101

#配置注册中心
eureka.client.service-url.defaultZone=http://192.168.xxx.xxx:8761/eureka/,http://192.168.xxx.xxx:8762/eureka/
eureka.instance.prefer-ip-address=true
eureka.instance.hostname=ebook-config-client-bus

#默认false,这里设置true,表示开启读取配置中心的配置
spring.cloud.config.discovery.enabled=true
#对应eureka中的配置中心serviceId,默认是configserver
spring.cloud.config.discovery.serviceId=ebook-config-server
#指定应用名,即配置文件的{application}部分,若客户端的spring.application.name与配置文件的{application}部分相同则可不配置此项
spring.cloud.config.name=config-client
#指定环境
spring.cloud.config.profile=dev
#git标签
spring.cloud.config.label=master

#springboot 默认开启了权限拦截 会导致 /actuator/refresh出现404,拒绝访问
management.endpoints.web.exposure.include=*

#rabbitmq配置
spring.rabbitmq.host=192.168.xxx.xxx
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
spring.rabbitmq.virtual-host=/

添加注解

在类上添加 @RefreshScope 注解。

发送更新请求

POST 请求 http://127.0.0.1:9101/actuator/bus-refresh请求地址为客户端地址)即可刷新。若是 集群配置,刷新一个客户端,集群中的其他客户端也会同时刷新

在spring boot 1.x 中,请求地址为 http://127.0.0.1:9101/bus/refresh


二、从服务端刷新

在这里插入图片描述
以下所有配置均在 微服务搭建Spring Cloud配置中心【服务端】 基础上添加这里贴出的配置都是完整版,但不再详细解释)。

添加依赖

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!--配置中心服务端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

<!--bus相关依赖,支持rabbitmq和kafka-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

添加配置

application.properties 找添加配置。

spring.application.name=ebook-config-server
server.port=9100

#配置注册中心
eureka.client.service-url.defaultZone=http://192.168.xxx.xxx:8761/eureka/,http://192.168.xxx.xxx:8762/eureka/
eureka.instance.prefer-ip-address=true
eureka.instance.hostname=ebook-config-server

spring.cloud.config.server.git.uri=http://192.168.xxx.xxx/git/config
spring.cloud.config.server.git.username=user
spring.cloud.config.server.git.password=123456

#rabbitmq配置
spring.rabbitmq.host=192.168.xxx.xxx
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
spring.rabbitmq.virtual-host=/

#springboot 默认开启了权限拦截 会导致 /actuator/refresh出现404,拒绝访问
management.endpoints.web.exposure.include=*

发送更新请求

POST 请求 http://127.0.0.1:9100/actuator/bus-refresh请求地址为服务端地址)即可刷新。若是 集群配置,刷新该服务端,集群中配置该服务端的客户端都会同时刷新

局部刷新

通过请求上边的地址,可以指定服务刷新,但是这种刷新是存在一定的问题的,如果是集群部署的时候,我们可能需要进行灰度发布,也就是只刷新某一个服务或者某一类服务

POST 请求 http://127.0.0.1:9100/actuator/bus-refresh?destination=ebook-config-client-bus:9101请求地址为服务端地址

其中 ebook-config-client-bus 是服务的 spring.application.name9101 是其对应的端口。

若地址换成
http://127.0.0.1:9100/actuator/bus-refresh?destination=ebook-config-client-bus:**
表示刷新 所有 ebook-config-client-bus 服务的集群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值