群集 Spring 引导应用程序

Clustering Spring Boot applications

我有一个适配器(在 Spring 引导和 Spring 集成中编写)从两个不同的来源(通过 REST 和专有库)检索货币汇率。我过滤不必要的东西,创建我系统中已知的 class 实例,并将速率发送到 JMS 集群。我希望复制此适配器。同一时间只能有一个实例 运行。当一个崩溃时(我从健康端点知道)另一个应该开始发布费率。我怎样才能达到这样的效果?我知道可以使用 Eureka 注册可用的服务,但如何自动打开其中一项?

在不了解更多细节的情况下很难给你推荐。

我个人会说 Eureka 不是为您想要实现的目标而构建的。但这听起来更像是您想了解一下 ZooKeeper。另见 Eureka FAQ for reference. ZooKeeper was exactly build for doing what you are trying to achieve: leader election.

另一方面,如果您也可以在服务关闭几秒钟的情况下幸存下来,我建议您使用已经监视 /health 端点的脚本来重新启动服务或使用系统谁已经像 SystemdDocker 那样构建了此构建,您可以在其中定义重启策略。

问题的解决方案是使用spring-cloud-cluster。可以使用 zookeeper 或 hazelcast 来协商领导权。在少数情况下,只有一个人被赋予领导角色。如果它崩溃了,另一个就会接替它的角色(它通过事件传播得到通知)。您还可以使用 yieldLeadership 方法手动放弃领导权(如果健康指标表明应用程序有问题)。