我用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秒),它似乎可以始终如一地工作。
这是一个可以接受的解决方案吗?感觉像是有点刺伤。
出于纯粹的考虑,您的问题的答案是否定的,这不是一个可接受的解决方案,因为正如这里所述,Docker出于某种原因从v3上删除了healthcheck
:
Docker已经有意识地决定不支持那些等待容器处于“就绪”状态的特性。他们认为,依赖于其他系统的应用程序应该具有抗失败的能力。
在同一链接中,描述了为什么:
healhcheck
一起使用。请参阅此处的示例推荐且可接受的解决方案是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将不工作,客户端也将被迫关闭。服务器关闭时,我们正在丢失事务消息。 即使服