1

我有一个在 Windows 服务器上运行的 Spring Boot 应用程序(jar 文件),用于在数据库中的某些表和基础设施的其他部分(通过 ActiveMQ 的消费者应用程序)之间同步数据。

让它 24/7 全天候运行而没有任何停机时间(或很少停机)至关重要。

我目前正在尝试找到最好的方法来做到这一点,因为我们当前的解决方案是运行同一个应用程序的多个实例并定义一个处于活动状态并连续 ping 它(通过数据库中的一个条目,它每 15 秒写入一次),而其他实例只是在运行并且什么都不做(非活动状态,导致锁定)。如果活动实例已停止更新数据库中的锁定条目(冻结或崩溃),则可用实例之一将取代它并开始处理数据。

我有一种感觉,它不是那么灵活的解决方案,尤其是当我需要准备我的代码的不同部分来检查锁定条目并同步所有这些实例时。它增加了代码的复杂性,我想避免它。

有没有更好的解决方案?插件、实现模式或工具?

PS:我阅读了 SpringBootApplication 中可用的健康端点,并认为它可以以某种方式帮助我(可能从其他一些看门狗软件\工具中对它们进行 ping\检查?),但不知道如何。

4

1 回答 1

2

如果发生崩溃,您仍然有 15 秒的延迟,而请求可能会失败

我会使用 netflix 的 zuul 路由器(开源)

它将平衡实例之间的负载,如果第一次调用失败,它将在另一个实例上重试您的请求

我很确定它已经完成了,但是在发生硬崩溃的情况下使用 Windows 服务重新启动实例

于 2018-01-11T22:31:26.233 回答