Spring 发现优先 Bootstrap 没有找到 ConfigServer

Spring Discovery First Bootstrap doesn't find ConfigServer

目前我是 运行 Spring 优先发现引导服务。 一个接一个地启动服务工作得很好,但我在通过 docker-compose 一次启动所有服务时遇到问题。

第一个发现 bootstrap 似乎没有像我预期的那样工作。我假设该服务会暂停/重试,直到他从配置服务收到配置,这是通过尤里卡发现的。但目前它会尝试解析一次配置,然后服务会立即启动——不管配置是否已经被引入。

服务 bootstrap 如下所示:

spring:
  application:
    name: my-service
  cloud:
    config:
      fail-fast: false
      discovery:
        enabled: true
        service-id: configserver
      retry:
        initialInterval: 2000
        multiplier: 1.5
        maxInterval: 60000
        maxAttempts: 10

server:
  port: ${APPLICATION_PORT:16000}
eureka:
  client:
    serviceUrl:
      defaultZone: http://${EUREKA_HOSTNAME:localhost}:15000/eureka/

eureka 配置如下所示:

spring:
  application:
    name: manager
server:
  port: 15000
eureka:
  client:
    registerWithEureka: true
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${EUREKA_HOSTNAME:localhost}:15000/eureka/

最后但同样重要的是 - 配置服务器配置如下所示:

spring:
  application:
    name: configserver
  cloud:
    config:
      fail-fast: true
server:
  port: 15001
eureka:
  client:
    serviceUrl:
      defaultZone: http://${EUREKA_HOSTNAME:localhost}:15000/eureka/

有谁能给点建议吗?

我发现了问题:

其实我发现我们这边有两个问题。第一个是没有合适的租约更新间隔。客户端刚刚重试接收带有缓存服务的配置。 由于缓存服务不包含配置服务,他无法接收到正确的配置。

第二个问题是没有等待足够的时间。这已通过提高 maxAttempts 来解决。所以配置和发现服务确实有足够的时间来启动。

客户端配置现在如下所示:

spring:
  application:
    name: service
  cloud:
    config:
      fail-fast: true
      discovery:
        enabled: true
        service-id: CONFIGSERVER
      retry:
        initialInterval: 2000
        multiplier: 1.5
        maxInterval: 60000
        maxAttempts: 100

server:
  port: ${APPLICATION_PORT:16000}
eureka:
  instance:
    lease-renewal-interval-in-seconds: 10
  client:
    fetch-registry: true
    serviceUrl:
      defaultZone: http://${EUREKA_HOSTNAME:localhost}:15000/eureka/