Spring Cloud-配置客户端缓存属性

时间:2018-09-10 17:11:33

标签: java spring spring-boot spring-cloud spring-cloud-config

当我从属性存储库更改值并重新启动Spring Cloud Config Server时,所做的更改不会反映在其使用方上。

我的微服务/application.properties:

spring.application.name=my-service
spring.cloud.config.uri=http://localhost:8888

MyServiceController.java

@RestController
public class MyServiceController {

    @Autowired
    private Configuration configuration;

    @GetMapping("/my-service")
    public MyServiceBean retrieveMyServiceProperties() {
        // show propertie's values
        return new MyServiceBean(configuration.getPropertie1(), configuration.getPropertie2());
    }

}

spring-cloud-config-server / application.properties

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

spring.cloud.config.server.git.uri=file://path

Git存储库

my-service.properties

my-service.propertie1=1
my-service.propertie2=2

当我向 localhost:8080 / my-service 发送GET请求时,就是这样的结果:

{  
   "propertie1":1,
   "propertie2":2
}

很好,没关系! 但是,如果我更改my-service.properties并重新启动Spring Cloud Config Server,所做的更改不会反映MyServiceController。我确实需要重新启动 my-microservice 应用程序,以使更改生效。 这是正常现象吗?我的意思是,如果这是远程的,那么应该配置是否缓存。

2 个答案:

答案 0 :(得分:1)

为了更新配置,我向POST发送了一个localhost:8080/actuator/refresh请求。

默认情况下,/refresh不显示在执行器端点中。

我确实在application.properties中暴露了以下行:

management.endpoints.web.exposure.include=*

然后,将正文的POST请求发送到上述端点。

答案 1 :(得分:1)

要更新客户端应用程序,最好使用RabbitMQ或Apache Kafka之类的消息代理。 此过程分为三个级别:

  1. 客户端应用程序和配置服务器订阅了消息代理中的特定主题( / refresh )。

  2. 配置服务器在更新后立即将 refresh 事件发送到该主题( / refresh )。 (例如,application.properties文件在git中得到更新)。

  3. 所有客户端应用程序都在监听 refresh 事件,当它们收到刷新消息时,它们将被更新

简而言之,我们可以使用 pub-sub 模型来更新客户端应用程序。

Config Server using Spring Cloud Config and Apache Kafka

Spring cloud config workflow