yuv*_*hon 6 java cloud-foundry spring-boot netflix-eureka spring-config
我正在编写spring boot应用程序,它使用spring 配置,部署在关键的云代工厂上,并由Netflix Eureka作为发现服务/负载均衡器公开。
我创建了一个 bean,如下所示:
@Component
@ConfigurationProperties("config")
@RefreshScope
@Data
public class GeneralProperties {
private boolean ignoreEvent;
}
Run Code Online (Sandbox Code Playgroud)
/refresh在更改配置存储库中的实际属性后调用 Eureka 公开的应用程序路由时,@refreshScope注释的值已更改(以响应状态结束该字段),这意味着它正常工作。
当在云上运行同一应用程序的多个实例并调用/refresh.
beeing 使用的路由是 Eureka 公开的路由,它使用它的负载均衡器将调用路由到可用实例之一。
这会导致意想不到的结果,即并非所有实例都使用属性的最新更改进行更新。
任何建议如何将更改应用于所有实例?
在这种情况下,您应该使用 Spring Cloud Bus。该框架背后的想法是将所有应用程序实例绑定到消息代理(RabbitMQ 或 Apache Kafka)中的一个主题。
将以下依赖项添加到您的 pom.xml 中:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus-parent</artifactId>
<version>1.3.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我添加了对 amqp 的依赖项,即 RabbitMQ。您还需要将应用程序绑定到 RabbitMQ,在 PCF 中这很容易,因为它内置于平台中。
当你需要刷新时,你应该调用:
POST /bus/refresh
Run Code Online (Sandbox Code Playgroud)
这将触发应用程序的所有实例正在侦听的主题的事件,因此所有实例都将刷新其 bean 配置。
祝你好运。
| 归档时间: |
|
| 查看次数: |
1550 次 |
| 最近记录: |