当前位置: 首页 > 知识库问答 >
问题:

在客户端重新启动之前,无法使用docker-compose访问Spring配置服务器

郭单鹗
2023-03-14

我用Eureka、Config Server和我的客户端设置了“发现优先”。

Fetching config from server at : http://localhost:8888
Connect Timeout Exception on Url - http://localhost:8888. Will be trying the next url if available
Fetching config from server at : http://a80b001d04a7:8888/
Located environment: name=client-server, profiles=[default], label=null, version=053c8e1b14dc0281d5af0349c9b2cf012c1a346f, state=null

不确定是否我的JAVA_OPTS属性在docker-compose.yml中设置得不够快,或者存在某种网络竞争状况,或者是什么。我在这件事上来回折腾太久了。

我的配置如下:

这是我的docker-compose.yml:

version: '3'
services:
  eureka:
    image: eureka-server:latest
    environment:
    - "JAVA_OPTS=-DEUREKA_SERVER=http://eureka:8761/eureka"
    ports:
      - 8761:8761
  config:
    image: config-server:latest
    environment:
      - "JAVA_OPTS=-DEUREKA_SERVER=http://eureka:8761/eureka"
    depends_on:
      - eureka
    ports:
      - 8888:8888
  client:
    image: client-server:latest
    environment:
      JAVA_OPTS: -DEUREKA_SERVER=http://eureka:8761/eureka
    depends_on:
      - config
    ports:
      - 9000:9000

下面是eureka-server application.yml:

server:
  port: 8761

spring:
  application:
    name: eureka-server

eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
    service-url:
      defaultZone: ${EUREKA_SERVER:http://localhost:8761/eureka}

下面是config-server bootstrap.yml:

server:
  port: 8888

eureka:
  client:
    serviceUrl:
      defaultZone: ${EUREKA_SERVER:http://localhost:8761/eureka}

spring:
  application:
    name: config-server
spring:
  application:
    name: client-server
  cloud:
    config:
      discovery:
        enabled: true
        serviceId: config-server
      fast-fail: true
    retry:
      max-attempts: 10000
      max-interval: 1000

eureka:
  instance:
    hostname: client-server
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: ${EUREKA_SERVER:http://localhost:8761/eureka}

使用docker-compose wait库(https://github.com/ufoscout/docker-compose-wait),我可以让客户机-服务器等待eureka和config可用,然后等待90秒(eureka文档建议注册最多需要90秒),它似乎可以始终如一地工作。

这是一个可以接受的解决方案吗?感觉像是有点刺伤。

共有1个答案

汪才英
2023-03-14

出于纯粹的考虑,您的问题的答案是否定的,这不是一个可接受的解决方案,因为正如这里所述,Docker出于某种原因从v3上删除了healthcheck:

Docker已经有意识地决定不支持那些等待容器处于“就绪”状态的特性。他们认为,依赖于其他系统的应用程序应该具有抗失败的能力。

在同一链接中,描述了为什么:

  1. 将v2.1与healhcheck一起使用。请参阅此处的示例
  2. 使用v3和诸如wait-for-it或dockerize之类的工具,正如@ortomala-lokni已经完美解释过的
  3. 使应用程序对config-server故障具有弹性,并使config-client能够在启动时重试连接

推荐且可接受的解决方案是3)。您可以使用这里提到的Spring Retry。找到下面的bootstrap.yml配置:

spring:
  application:
    name: config-client
  profiles:
     active: dev
  cloud:
    config:
     discovery:
       enabled: true
       service-id: config-server
     fail-fast: true
     retry:
       initial-interval: 1500
       multiplier: 1.5
       max-attempts: 10000
       max-interval: 1000

eureka:
  instance:
    hostname: config-client
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: ${EUREKA_SERVER:http://localhost:8761/eureka}

顺便说一句,我在您的spring配置中发现了一个错误。它是fail-fast而不是fast-fail

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>

您可以在这里找到一个很好的配置(和解释),同时考虑到Eureka服务器注册过程中的弹性。

当有一个微服务环境时,我们必须考虑到当像config-service、discovery-service这样的平台服务在短时间内不可用时环境的弹性。

但我根本不是一个纯粹主义者,我不会删除人们正在使用的一些功能(这是一个自由的问题)。因此,另一种解决方案是:

如果它对你有用,那就去吧

因为我真的不明白为什么Docker从V3中取消了非常棒的healthcheck命令。

 类似资料:
  • 我有一个短期任务,客户端到spring云配置。(依赖于spring cloud starter配置或spring cloud配置客户端)。 正如我提到的,这是一个短暂的任务,它启动、从服务器加载配置、进行一些处理并关闭。 问题是spring-cloud d-config-Client启动Web服务器(tomcat),这是冗余的-我不想在我的客户端应用程序/任务上启动Web服务器。 我知道这个Web

  • 在这里,我使用rancher和docker compose来初始化spring cloud config客户端和服务器,但当spring cloud config server未就绪时,客户端启动失败,需要在服务器就绪时重新启动。我想问,当服务器准备就绪时,是否有任何机制可以让SpringCloudConfig客户端重新加载或重新启动?

  • 错误: > 连客户端都没有启动 http://localhost:8080/ 将spring.config.import=configServer:属性添加到您的配置中。如果不需要配置,则添加spring.config.import=optional:configserver:。要禁用此检查,请设置spring.cloud.config.enabled=false或spring.cloud.con

  • 当我试图启动SpringBoot主应用程序时,出现以下异常。为什么我会得到这个特例。 异常: Spring boot主java类

  • 我正在关注应用程序中的条目。 我有下面的spring云服务器应用程序代码。 我收到以下错误。 启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2021 02月24日01:39:52.356错误20804---[restartedMain]o.s.b.d.LoggingFailureAnalysisReporter: 应用程序无法启动 描述:

  • 我们正在我们的应用程序中构建一个新的Hazelcast缓存服务器客户端模型。 我们使用的是开放JDK 14 Spring Boot-2.3.2 Hazelcast-3.12.8 服务器Hazelcast配置 客户端Hazel cast配置 要求-如果服务器和客户端都已启动并运行,则此配置可以完美工作。如果服务器关闭,Near将不工作,客户端也将被迫关闭。服务器关闭时,我们正在丢失事务消息。 即使服