当我从属性存储库更改值并重新启动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 应用程序,以使更改生效。
这是正常现象吗?我的意思是,如果这是远程的,那么应该配置是否缓存。
答案 0 :(得分:1)
为了更新配置,我向POST
发送了一个localhost:8080/actuator/refresh
请求。
默认情况下,/refresh
不显示在执行器端点中。
我确实在application.properties中暴露了以下行:
management.endpoints.web.exposure.include=*
然后,将否正文的POST
请求发送到上述端点。
答案 1 :(得分:1)
要更新客户端应用程序,最好使用RabbitMQ或Apache Kafka之类的消息代理。 此过程分为三个级别:
客户端应用程序和配置服务器订阅了消息代理中的特定主题( / refresh )。
配置服务器在更新后立即将 refresh 事件发送到该主题( / refresh )。 (例如,application.properties文件在git中得到更新)。
所有客户端应用程序都在监听 refresh 事件,当它们收到刷新消息时,它们将被更新
简而言之,我们可以使用 pub-sub 模型来更新客户端应用程序。