Spring Cloud Config(二)

143 阅读1分钟

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【应用名称】,{application}【应用名称】,{application}表示的是配置的spring.application.name为user-service或者order-service,请求的是发起一个在配置服务中心上跟应用名称匹配的order-service.yml或者user-service.yml文件的更新的通知 4,但是这种需要人工操作,怎么做成自动的呢? 使用gitee的WebHooks,就是在添加,更新,删除后会自动触发这个钩子,让自动访问这个连接即可。