1,配置中心修改配置后项目同步刷新问题
在配置中心改了配置之后,项目中的@Value(${name})不会刷新的,基于这个问题的解决方案如下:
- 1),在启动类上增加注解 @RefreshScope
- 2),在order-service-provider中增加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 3),在application.yml中配置一个刷新的端点
management:
endpoints:
web:
exposure:
include: refresh
- 4),第三步提供的端点,需要一个POST请求来发起进行更新
http://localhost:8082/actuator/refresh
这是一个微服务项目,如果微服务项目很多【本测试项目中user-service-provider和order-service-provider的配置和依赖一样】,那么每一个微服务项目都需要这么刷新,岂不是太麻烦了,所以Spring Cloud提供了一个BUS总线
2,Spring Cloud BUS
这个并不仅是为这个问题提供的! 1),在spring-cloud-config-server项目中添加bus依赖和monitor依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-monitor</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
在order-service-provider和user-service-provider中添加bus依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
2,给spring-cloud-config-server项目的application.properties添加以下配置:
# 配置BUS的一些信息
# 用来刷新缓存的端点
management.endpoints.web.exposure.include=bus-refresh
# 开启
spring.cloud.bus.enabled=true
spring.cloud.bus.trace.enabled=true
spring.cloud.bus.refresh.enabled=true
# 配置kafka的连接地址
spring.kafka.bootstrap-servers=127.0.0.1:9092
# 主要是对组user-service和组order-service实现一个广播通知(不能点对点了)
spring.kafka.consumer.group-id=config-sever (等学了kafka再详细了解吧)
给order-service-provider项目的添加以下配置:
spring:
cloud:
bus:
enabled: true
kafka:
bootstrap-servers: 127.0.0.1:9092
consumer:
group-id: order-service(等学了kafka再详细了解吧)
给user-service-provider项目的添加以下配置:
spring:
cloud:
bus:
enabled: true
kafka:
bootstrap-servers: 127.0.0.1:9092
consumer:
group-id: user-service (等学了kafka再详细了解吧)
3,配置好之后,启动kafka服务,全部重启应用,然后POST访问:http://127.0.0.1:9091/monitor?path=* 这里的* 其实就是{application}表示的是配置的spring.application.name为user-service或者order-service,请求的是发起一个在配置服务中心上跟应用名称匹配的order-service.yml或者user-service.yml文件的更新的通知
4,但是这种需要人工操作,怎么做成自动的呢?
使用gitee的WebHooks,就是在添加,更新,删除后会自动触发这个钩子,让自动访问这个连接即可。