我正在使用 docker 运行 4 个微服务。这里一项服务依赖于其他服务。这就是为什么我需要在使用任何服务之前检查其他服务是否正常?
为了启动所有服务,我正在编写一个 bash 脚本。 出于我的工作目的,我正在使用
sleep
直到正确启动rabbitmq。
检查rabbitmq是否启动的更好解决方案是什么?直到rabbitmq不起来我还得等。 现在为了我的工作目的,我正在使用这样的 -
# wait for rabbitmq container be ready
sleep 14
这是rabbitMQ的docker-compose容器
rabbitmq:
image: 'rabbitmq:3.8.9'
container_name: rabbitmq_dev
restart: always
ports:
- 5675:5672
environment:
- RABBITMQ_DEFAULT_USER=rabbit
- RABBITMQ_DEFAULT_PASS=pass
depends_on:
- consul
networks:
- my_networks
我认为HealthCheck可以解决您的问题。
通过 docker compose 结合使用
healthcheck
和 depends_on
,有一种干净、直接的方法可以实现这一点。如下面的代码片段所示:
rabbitmq:
image: rabbitmq:latest
container_name: rabbitmq_dev
restart: always
ports:
- 5675:5672
environment:
- RABBITMQ_DEFAULT_USER=rabbit
- RABBITMQ_DEFAULT_PASS=pass
depends_on:
- consul
networks:
- my_networks
healthcheck:
test: rabbitmq-diagnostics -q ping
interval: 30s
timeout: 10s
retries: 5
start_period: 10s
并且在其他服务中您需要添加
depends_on
:
your_app:
...
depends_on:
rabbitmq:
condition: service_healthy