java - 解决对docker-compose的依赖

标签 java docker-compose spring-cloud microservices spring-cloud-config

我有一个 Spring boot 微服务连接到 Spring 配置服务来获取配置,但显然,该服务在配置服务器完全启动并运行后无法启动,否则它将永远无法再次连接(?)

这是我运行 docker-compose 文件时在服务控制台中看到的错误:

2016-04-07 14:25:51.305 WARN 1 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://configserver:8888/myservice/default": Connection refused; nested exception is java.net.ConnectException: Connection refused

这是我的 docker-compose 文件:

discovery:
  image:discovery-service
  ports:
   - "8761:8761"
configserver:
  image:config-service
  ports:
   - "8888:8888"
  links:
   - discovery
myservice:
  image:my-service
  ports:
   - "9006:9006"
  links:
   - discovery
   - configserver

这是服务 bootstrap.yml 配置:

spring:
  application:
    name: myservice
  cloud:
    enabled: true
    config:
      uri: http://configserver:8888
encrypt:
  failOnError: false

一旦这两个服务在 Eureka(发现)上运行并注册,我尝试在 myservice 上调用 /refresh 但它不断失败并返回相同的错误。

如果我重新启动 docker 实例,它的连接不会出现问题。

这是否意味着我必须保持配置服务器持续运行才能做到这一点?

最佳答案

如果配置服务器启动时尚未准备好,您需要将客户端应用程序配置为更加健壮。 user guide 中有一个部分。 TL;DR 包括 spring-retry 并设置 spring.cloud.config.failFast=true

关于java - 解决对docker-compose的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36479452/

相关文章:

java - 使用 im4java 进行图像比较

Elasticsearch 忽略我的 JVM 堆大小设置

post - Feign 无法使用 POST 方法

java - 为什么Spring boot在使用Eureka时会执行两次SpringApplicationRunListener

java - 有没有可以基于接口(interface)构建类型的 IoC 容器?

java - 在 Java 中打印对象数组

java删除JMenuBar

docker - 如何从非root用户运行docker容器?

docker - 已安装的软件包和/home/* 文件有时会在 ddev 重新启动(或 ddev 停止、启动)时重置

java - 如何在 zuul/ribbon 中获取请求将转发到的服务器的主机名