小编Kra*_*roc的帖子

Eureka First Discovery和配置客户端使用Docker Compose重试

我们有三个Spring Boot应用程序:

  • 尤里卡服务
  • 配置服务器
  • 使用Eureka和Config Server的简单Web服务

我已经设置了服务,以便我们使用Eureka First Discovery,即简单的Web应用程序从eureka服务中找到有关配置服务器的信息.

当单独启动时(在本地或通过将它们作为单独的docker镜像启动)一切正常,即在发现服务运行后启动配置服务器,并在配置服务器运行后启动Simple Web服务.

当docker-compose用于启动服务时,它们显然是在同一时间启动,并且基本上可以竞争启动和运行.这不是问题,因为我们已经添加了failFast:true并重试了简单Web服务的值,并且还重新启动了docker容器,以便在发现服务和配置服务器都是这两个时,最终将重新启动简单的Web服务跑步,但这不觉得最佳.

我们注意到的意外行为如下:

  • 简单的Web服务重新尝试多次连接到发现服务.这是明智的和预期的
  • 同时,简单的Web服务尝试联系配置服务器.因为它无法联系发现服务,所以它会重试连接到localhost上的配置服务器,例如,log show retries将转到http:// localhost:8888.这不是预期的.
  • 简单的Web服务最终将成功连接到发现服务,但是日志显示它仍然尝试通过访问http:// localhost:8888来建立与配置服务器的通信.再次,这不是理想的.

三个问题/意见:

  • 当配置客户端配置为使用发现来查找配置服务器时,配置客户端回退到尝试localhost是一个明智的策略吗?8888?
  • 建立eureka连接时,重试机制现在是否应该切换到尝试Eureka所指示的配置服务器端点?在这种情况下,基本上为更高/更长的重试间隔和配置服务器连接的周期是没有意义的,因为如果它正在查看localhost,它永远不会连接到它,所以我们最好只是快速失败.
  • 是否有任何属性可以覆盖此行为?

我已经创建了一个示例github repo来演示这种行为:

https://github.com/KramKroc/eurekafirstdiscovery/tree/master

spring-boot spring-cloud netflix-eureka docker-compose

7
推荐指数
0
解决办法
1413
查看次数

Spring-boot之外的ConfigurationProperties

是否有可能为非Spring Boot应用程序提供@ConfigurationProperties行为?为了更清楚地解释一下,我有一个库模块,以后我想在非弹簧启动环境中使用,所以我想知道是否可以使用ConfigurationProperties而不会引入大量的spring-boot核心依赖项.

spring-boot

5
推荐指数
1
解决办法
731
查看次数

撰写入口点中的 Docker 变量扩展

我发现如果我在 docker-compose 服务条目中覆盖图像的 ENTRYPOINT,它会忽略环境部分中定义的变量,但会从 env 文件中读取它们,例如

  someserver:
    image: "some-server:latest"
    restart: always
    ports:
      - "8849:8849"
    environment:
       javaMemoryLimit: 3056M
       JAVA_OPTS: "-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=8849 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.rmi.port=8849 -Djava.rmi.server.hostname=localhost"
    entrypoint: java ${JAVA_OPTS} -Xmx${javaMemoryLimit} -jar /app.jar
Run Code Online (Sandbox Code Playgroud)

当我这样做时docker-compose up,我收到有关未设置变量的警告:

WARNING: The JAVA_OPTS variable is not set. Defaulting to a blank string.
WARNING: The javaMemoryLimit variable is not set. Defaulting to a blank string.
Run Code Online (Sandbox Code Playgroud)

但是当我在 env 文件中定义变量时,例如 .env

javaMemoryLimit=2098M
JAVA_OPTS=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=8849 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.rmi.port=8849 -Djava.rmi.server.hostname=localhost
Run Code Online (Sandbox Code Playgroud)

然后变量按预期扩展。

docker dockerfile docker-compose

3
推荐指数
1
解决办法
4496
查看次数