0

我在网上找不到关于我的问题的解决方案或任何提示。

我想为我的 Spring Boot 应用程序使用 Apache Zookeeper 设置中央配置管理器,该应用程序可以同时具有多个实例。

所以在 Zookeeper 中,我只会有一些范围的数据:

0-100

101-200

...

900-1000...

假设我一开始有两个应用程序实例(A 和 B)。然后实例 A 将获得范围 0-100,实例 B 将获得下一个可用范围,即 101-200。如果添加新实例或重新启动某个实例,则它将获得下一个可用范围。每个实例只需要从配置中读取一次数据,即在实例启动时。

我知道使用 @Value 和 @ConfigurationProperties 从 Zookeeper 读取数据。

具体有问题:

  • 如何以这种方式配置 Zookeeper,以便一旦读取数据,它就不再有效或相关?
  • 如何在 Spring Boot 中设置仅在应用程序启动时从 Zookeeper 读取配置一次?
4

1 回答 1

0
  1. 如果添加新实例或重新启动某个实例,则它将获得下一个可用范围。

您可以创建一个 ZNode "/counter" 并在那里写入起始值 (1)。每次启动应用程序的新实例时,都应向此 ZNode 询问当前值并设置新值(在您的情况下,如果它是 1,则新值应该是 1+100=101)。当您更新 ZNode 中的值时,您还需要检查记录的版本。

  1. 如何以这种方式配置 Zookeeper,以便一旦读取数据,它就不再有效或相关?

您可以在 ZNode 中写入一些“无效”值或将其删除。

  1. 如何在 Spring Boot 中设置仅在应用程序启动时从 Zookeeper 读取配置一次?

您可以在“main(String[] args)”方法(启动 Spring 应用程序的位置)中在应用程序启动时做任何您想做的事情。因此,您可以在此处阅读配置,它只会执行一次。抱歉,我没有使用 Spring Cloud (:

于 2020-03-31T06:29:40.243 回答