Spring cloud配置客户端有助于在运行时更改属性。以下是两种方法
这两种方法的问题在于,可能有多个客户端应用程序在云代工厂中运行,其余的调用将到达任何一个实例,使应用程序处于不一致状态
EG。 POST到/ env可以命中实例1并使用旧数据离开实例2。
我能想到的一个解决方案是使用for循环“n”次连续点击这些终点只是为了确保所有实例都会更新,但这是一个粗略的解决方案。有没有更好的解决方案呢?
注意:我们正在私有PCF环境中部署我们的应用程序。
答案 0 :(得分:6)
针对该问题的规范解决方案是Spring Cloud Bus。如果您的应用程序绑定到RabbitMQ服务并且它们在类路径上有总线,则会有其他端点/ bus / env和/ bus / refresh将消息广播到所有实例。有关详细信息,请参阅文档。
答案 1 :(得分:-1)
Spring Cloud Config Server Not Refreshing
请参阅org.springframework.cloud.bootstrap.config.RefreshEndpoint代码:
public synchronized String[] refresh() {
Map<String, Object> before = extract(context.getEnvironment()
.getPropertySources());
addConfigFilesToEnvironment();
Set<String> keys = changes(before,
extract(context.getEnvironment().getPropertySources())).keySet();
scope.refreshAll();
if (keys.isEmpty()) {
return new String[0];
}
context.publishEvent(new EnvironmentChangeEvent(keys));
return keys.toArray(new String[keys.size()]);
}
这意味着/刷新端点首先拉git然后刷新catch,并公开一个environmentChangeEvent,这样我们就可以像这样为客户提供代码。