Art*_*nov 3 java spring docker spring-boot docker-compose
春天我有几个微小的细胞.其中一个是配置服务器.我尝试用docker-compose完全启动服务.但是有问题.微服务在初始化之前尝试从配置服务器获取配置.我想为microservice的启动编写脚本以防止错误启动.我现在必须如何确定配置服务器准备就绪的时刻.端口监听不起作用.Docker隐藏了有关他的网络的信息.我相信有比标准输出解析更好的方法.
有人知道如何确定春季启动应用程序启动的时间吗?
有人知道如何确定春季启动应用程序启动的时间吗?
当您的应用程序200从/health端点返回具有类似负载的代码时,它必须准备就绪
{
"status": "UP"
}
Run Code Online (Sandbox Code Playgroud)
这意味着您的应用程序没有问题并且已准备好工作,无论如何,监视器应用程序通常使用此端点来了解应用程序运行状况,以便它可以维护群集,此端点不会被其他应用程序使用,此监视器常用
/health返回DOWN状态时解决它的问题看看docker healthcheck,它使用与spring相同的概念
要使该端点可用,您需要添加弹簧致动器依赖性,这是一个gradle样本
compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: '1.5.10.RELEASE'
Run Code Online (Sandbox Code Playgroud)
微服务在初始化之前尝试从配置服务器获取配置....
这里有一些要点清楚
所以我的建议是,当你的应用程序尝试从配置服务器应用程序获取信息时,让你的应用程序失败,如果失败你可以做一些事情:
/healthSystem.exit(-1)并让docker-compose一次又一次地重启您的应用程序,直到配置服务器回答这里有一些简洁的例子来模拟你的案例并使用docker解决这个问题
config-server将花费比app-1更长的时间来准备,然后app-1将保持不健康,直到config-server正确响应
version: '3.4'
services:
mg-config-server:
image: nginx:1.10
healthcheck:
test: ["CMD", "bash", "-c", "sleep 15; exit 0"]
interval: 10s
timeout: 17s
retries: 3
start_period: 10s
networks:
- my-net
command: bash -c "echo starting; sleep 20; nginx -g 'daemon off;'"
mg-app-1:
image: alpine:3.7
healthcheck:
test: ["CMD", "curl", "http://mg-config-server"]
interval: 5s
timeout: 5s
retries: 3
start_period: 1s
command: sh -c 'echo starting; apk add --update curl; tail -f /dev/null'
restart: always
networks:
- my-net
dns:
- 8.8.8.8
networks:
my-net:
driver: overlay
Run Code Online (Sandbox Code Playgroud)
然后开始吧
docker-compose up
docker ps | grep "mg"
Run Code Online (Sandbox Code Playgroud)
无论如何,在这种情况下使用docker swarm更有意义,因为它会检查healthcheck端点并重新启动容器,如果它不健康
docker swarm init --advertise-addr <your-machine-ip>
docker stack deploy --compose-file docker-compose.yml my-stack && docker ps | grep "my-stack"
Run Code Online (Sandbox Code Playgroud)
Docker版本: 18.02.0-ce
抱歉,答案太长,希望有所帮助
| 归档时间: |
|
| 查看次数: |
3246 次 |
| 最近记录: |