我们有三个 Spring Boot 应用程序:
- 尤里卡服务
- 配置服务器
- 使用 Eureka 和 Config Server 的简单 Web 服务
我已经设置了服务,以便我们使用 Eureka First Discovery,即简单的 Web 应用程序从 eureka 服务中找出配置服务器。
单独启动时(本地启动或作为单独的 docker 映像启动)一切正常,即在发现服务运行后启动配置服务器,并且在配置服务器运行后启动简单 Web 服务。
当使用 docker-compose 启动服务时,它们显然是同时启动的,并且基本上是在竞相启动和运行。这不是问题,因为我们已将 failFast: true 和 retry 值添加到简单的 Web 服务,并让 docker 容器重新启动,以便简单的 Web 服务最终将在发现服务和配置服务器同时重新启动时重新启动运行,但这感觉不是最佳的。
我们注意到的意外行为如下:
- 简单的 Web 服务会多次重新尝试连接到发现服务。这是明智和预期的
- 同时,简单的 Web 服务尝试联系配置服务器。因为它无法联系发现服务,它会重试连接到本地主机上的配置服务器,例如日志显示重试到http://localhost:8888。这是没有预料到的。
- 简单的 Web 服务最终将成功连接到发现服务,但日志显示它仍然尝试通过访问http://localhost:8888来建立与配置服务器的通信。同样,这并不理想。
三个问题/意见:
- 当配置客户端被配置为使用发现来查找配置服务器时,配置客户端回退到尝试 localhost:8888 是一个明智的策略吗?
- 建立 eureka 连接后,重试机制现在是否应该切换到尝试 Eureka 指示的配置服务器端点?在这种情况下,基本上为配置服务器连接设置更高/更长的重试间隔和周期是没有意义的,因为如果它正在查看本地主机,它永远不会连接到它,所以我们最好只是快速失败。
- 是否有任何属性可以覆盖此行为?
我创建了一个演示此行为的示例 github 存储库:
https://github.com/KramKroc/eurekafirstdiscovery/tree/master