Java 微服务可以';t到达docker compose中的配置服务
我目前有两个微服务:Java 微服务可以';t到达docker compose中的配置服务,java,spring-boot,docker,docker-compose,microservices,Java,Spring Boot,Docker,Docker Compose,Microservices,我目前有两个微服务: -服务-端口8080,此微服务尝试从其他微服务获取配置。 -config-端口8888,此微服务应提供配置 由于某些原因,我的服务无法从配置微服务获取配置。 我的配置微服务应该可以工作,因为我可以在我收到的机器上运行localhost:8888/service/default: {"name":"service","profiles":["default"],"label":null,"version":null,"state":null,"propertySources"
-服务-端口8080,此微服务尝试从其他微服务获取配置。
-config-端口8888,此微服务应提供配置 由于某些原因,我的服务无法从配置微服务获取配置。
我的配置微服务应该可以工作,因为我可以在我收到的机器上运行localhost:8888/service/default:
{"name":"service","profiles":["default"],"label":null,"version":null,"state":null,"propertySources":[{"name":"classpath:/shared/service.yml","source":{"server.port":8080,"spring.security.user.password":"admin"}},{"name":"classpath:/shared/service.yaml","source":{"server.port":8080,"spring.security.user.password":"admin"}}]}
收到错误
Docker-compose.yaml
version: '3.7'
services:
config:
container_name: config
build: ./config
ports:
- 8888:8888
service:
container_name: service
build: ./service
ports:
- 8080:8080
depends_on:
- config
服务文件:
FROM openjdk:8-jdk-alpine
ADD target/service.jar /app.jar
CMD [ "java", "-Xmx200m", "-jar", "/app.jar" ]
EXPOSE 8080
服务引导.yaml
spring:
application:
name: service
cloud:
config:
uri: http://config:8888
fail-fast: true
service.yaml(具有服务配置)
配置Dockerfile
FROM openjdk:8-jdk-alpine
ADD target/config.jar /app.jar
CMD [ "java", "-Xmx200m", "-jar", "/app.jar" ]
EXPOSE 8888
Config application.yaml
spring:
application:
name: config
profiles:
active: composite
cloud:
config:
server:
composite:
- type: native
search-locations: classpath:/shared
server:
port: 8888
shared/service.yaml(具有服务配置)
有什么想法吗
我发现了一些类似的问题,虽然他们的URI只有问题,但我的设置是正确的。
当一项服务依赖于另一项服务时,在连接到该服务之前,必须确保后者已完全启动 在您的情况下,最可能的情况是,
config
已启动,但在运行service
时尚未准备就绪(上下文已启动)。正如@Ganesh Karewad和@asolanki所指出的,解决方案是实现重新连接逻辑。另一个解决方案是确保config
已初始化,并在运行服务之前接受连接
您可以通过等待config
应用程序启动的脚本来实现这一点。在另一种情况下,您可以使用命令配置config
容器,并在启动它之后,等待它标记为正常。然后可以运行服务容器
讨论和讨论了类似问题
希望这能有所帮助。您的2个微服务之间似乎有着很强的依赖性,这背后的原因是什么?您的确切意思是什么?我打算创建更多的服务,配置服务将为其提供配置。我的意思是,微服务应该是独立的,如果存在依赖项,则应该在另一层中解决。您提供了一个有效点。我想我并没有考虑太多。配置服务可能会出现一个初始延迟,到那个时候依赖服务已经尝试连接到它了。如果可能的话,您可以在容器安装到服务容器中之后通过ssh和ping配置容器并卷曲端点来调试它。如果不是,则是配置问题。您可以在compose文件中创建一个环境变量,并将该值设置为config service,然后使用它连接到config service。
FROM openjdk:8-jdk-alpine
ADD target/config.jar /app.jar
CMD [ "java", "-Xmx200m", "-jar", "/app.jar" ]
EXPOSE 8888
spring:
application:
name: config
profiles:
active: composite
cloud:
config:
server:
composite:
- type: native
search-locations: classpath:/shared
server:
port: 8888
server:
port: 8080
spring:
security:
user:
password: admin # doesnt set since no connection