使用zuul网关做服务映射的时候,部署了3个相同service 端口分别是:8769 8770 8771 当我们断掉8769服务的时候,ribbon按理说会认定8769断掉了,从而后面的请求不会再命中8769这个服务端口。然而并不是想的那样,还是一样会命中失败的服务。直接跳坑了~
做集群映射离不开eureka,以上三个服务都注册在eureka,当8769断掉后,eureka自身有心跳检测,默认是15分钟,如果服务在15分钟内没有响应则认定该服务出现故障,即下线该服务。在这期间ribbon把请求还是一样会均衡各个集群节点,因为它获取节点是否正常是通过eureka中心得到的,所以eureka如果没有下线服务,那么ribbon会一直认为该服务在线。那么这种情况怎么处理呢?
在eureka项目yml 设置eureka.server.enableSelfPreservation = false 关闭自我保护机制
在service项目yml 设置 eureka.instance.leaseRenewalIntervalInSeconds = 5
leaseExpirationDurationInSeconds = 10