我在使用Docker的Spring Cloud环境中使用Netflix Eureka和Zuul时遇到问题。
我目前的设置如下:3个Docker容器:
此设置工作正常,但当我开始使用服务的缩放时,麻烦就开始了。 当我扩展时,Zuul会在30秒后获取新服务器。这对我很好。但是,当我取下服务容器时,对Zuul的调用可能会失败(HTTP错误代码为200!),因为Zuul仍然认为服务器位于活动池中。
我使用的是Spring Boot 1.3.6和Spring Cloud 1.1.2
我的问题:
答案 0 :(得分:1)
你不必告知zuul关于服务器列表中的更改,就像它在下面完成的那样。这里的真正问题是,尤里卡决定将这些实例保留在其注册表中。 有一条规则:如果少于85%的服务响应healthcheck,那么eureka认为它是由于网络故障/分区并将所有服务保留在注册表中。如果您只有3个服务实例,那么很可能会发生这种情况。可以想象,如果一个关闭(所有3个实例中的33.3%),eureka将忽略它并仍然向客户提供此实例。
如果你有100台服务器,这可能是一个不错的功能:)它的netflix工具主要是根据他们的需要进行调整。
您可以尝试关闭selfPreservation:
eureka.server.enable-self-preservation=false
或将阈值调整到某个较低的值:
eureka.server.renewal-percent-threshold=0.85