Spring cloud Eureka服务器缓存刷新

Spring cloud Eureka服务器缓存刷新,spring-cloud,netflix-eureka,Spring Cloud,Netflix Eureka,有两台eureka服务器(如ES1和ES2)具有以下配置 spring: profiles: production server: port: 8761 eureka: client: registerWithEureka: true fetchRegistry: true serviceUrl: defaultZone: http://${eureka.peer.hostname}:8761/eureka/ 同步工作,但在发布到生产

有两台eureka服务器(如ES1和ES2)具有以下配置

spring:
  profiles: production

server:
  port: 8761    

eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://${eureka.peer.hostname}:8761/eureka/
同步工作,但在发布到生产过程中,一台eureka服务器(如ES2)与另一台eureka服务器(ES1)发生故障仍然保留旧的缓存信息,当ES2重新启动时,它会注册eureka客户端,但不会取消旧客户端的注册,这会导致功能区负载平衡器使用过时的信息

使用以下配置注册eureka客户端

eureka:
  instance:
    metadataMap:
      instanceId: ${service.contextPath}:${spring.application.instance_id:${random.value}}
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

为什么没有从eureka服务器取消注册旧实例?因此,我们必须完全关闭并重新启动基础设施。

我想您看到的是Eureka自我保护功能的结果。简言之,当Eureka服务器注意到其在最后一分钟内收到的预期续订少于80%时,它会自动停止正在到期的实例租约。当ES1宕机时,ES2不再接收来自最初向ES1注册的客户端的心跳-它可能会激活自我保护模式

为了避免这种情况,您应该使用ES1和ES2配置客户端:如果ES1不可用,客户端将自动切换到ES2。为此,只需按如下方式列出两个地址:

eureka:
  client:
    serviceUrl:
      defaultZone: http://ES1:8761/eureka/,http://ES2:8761/eureka/

您还可以禁用自我保护功能-但这不是在集群中的预期配置-因此,请期待奇怪的行为:-(

@Vibhaanshu有什么消息吗?上面的分析与您的情况相符吗?很抱歉迟到了。我注意到所遵循的部署策略不正确。我们没有让服务从eureka正确注销,因为该对等eureka服务器具有过时的服务实例ID。我们的结构是n一台服务器向运行在同一台服务器上的eureka服务器注册,另一台服务器向运行在该服务器上的eureka服务器注册服务。两台eureka服务器之间发生同步。将测试您的方法,并且正在定义策略,以便在不停机的情况下部署不同版本的服务。希望这对您有所帮助-