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

Spring Cloud - Configuration client caching properties

当我更改我的属性存储库中的值并重新启动 Spring 云配置服务器时,更改不会反映在它的消费者上。

my-microservice/application.属性:

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 回购

我的-service.properties

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

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

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

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

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

默认情况下,/refresh 未在执行器端点中公开。

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

management.endpoints.web.exposure.include=*

然后,向上面的端点发送一个 POST 没有 没有 正文的请求。

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

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

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

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

In brief, we can use the pub-sub model for updating our client applications.

Config Server using Spring Cloud Config and Apache Kafka