我到处阅读@RefreshScope,了解与 RabbitMQ 和 Kafka 一起使用的云总线应用程序。但就我而言,我使用的是 AWS Parameter store。我希望自动刷新所有客户端实例,而无需在 AWS 控制台上重建服务器。
我从 Paramstore 创建了 AWS Eventbridge 以通知 Kinesis Stream,但我无法弄清楚它如何通知我的所有客户端节点,而不是将负载均衡器刷新到仅一个节点(实例)。
感谢您提前回复。
我到处阅读@RefreshScope,了解与 RabbitMQ 和 Kafka 一起使用的云总线应用程序。但就我而言,我使用的是 AWS Parameter store。我希望自动刷新所有客户端实例,而无需在 AWS 控制台上重建服务器。
我从 Paramstore 创建了 AWS Eventbridge 以通知 Kinesis Stream,但我无法弄清楚它如何通知我的所有客户端节点,而不是将负载均衡器刷新到仅一个节点(实例)。
感谢您提前回复。
但是,我从未使用过 AWS Eventbridge / Kinesis:
@RefreshScope
是属于spring cloud而不是AWS的东西。
更准确地说,当 Spring Boot 云配置服务中的配置更改时,使用此范围定义的 bean 将由 Spring 重新加载,而不会“动态”重新加载整个应用程序上下文。通常这意味着您不必重新启动应用程序。
refresh
现在,应该使用公开端点的执行器部署 Spring Boot 微服务。手动调用此端点将导致所有@RefreshScope
bean 重新加载。
这里是源代码:RefreshEndpoint
@Endpoint(id = "refresh")
public class RefreshEndpoint {
private ContextRefresher contextRefresher;
public RefreshEndpoint(ContextRefresher contextRefresher) {
this.contextRefresher = contextRefresher;
}
@WriteOperation
public Collection<String> refresh() {
Set<String> keys = this.contextRefresher.refresh();
return keys;
}
}
如您所见,它只是调用contextRefresher.refresh()
,ContextRefresher
是一个 bean,您可以将其注入自定义代码中,该代码将侦听来自 AWS Parameter store 的更改(它应该以某种方式直接调用它,或者可能发送一些您可以使用的消息或其他东西)。
如果您使用的是 spring-cloud-bus (免责声明,我从未使用过它)它bus-refresh
也会暴露端点(与我所描述的机制非常相似),请阅读spring-cloud-bus 文档以获取更多详细信息。
感谢团队分享信息。
这是我为使其工作所做的工作。将这两个库添加到我的项目中
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kinesis</artifactId>
<version>1.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
并将这两个条目添加到 bootstrap.properties
cloud.aws.region.static=us-east-1
cloud.aws.stack.auto = false
并使用此端点刷新 (/bus-refresh)