Rabbit MQ - Esperando pelo setup
o RabbitMQ me pregou uma peça e queria ver se fiz algo errado ou rola com todo mundo. Minha aplicação esta rodando com compose, onde tenho o App1 (exemplo), o nginx e o RabbitMQ. Coloquei o Depends on para subir na ordem Rabbit, App e nginx achando que estaria tudo certo, mas achei errado. Quando o container subia a conexão com o maldito coelho falhava. usando docker exec -it App1 eu verificava que estava tudo certo e a aplicação até subia se eu rodasse. Conclusão: Eu precisava colocar algo no meu codigo que esperasse o Rabbit estar apto a receber conexões, pois o Depends on só verifica se o container ta no ar aparentemente.
Olá Txug0
É possivel criar algumas condições mais avançadas para ordem de inicialização utilizando healthcheck
Codigo de exemplo
services:
rabbitmq:
image: rabbitmq:3-management
ports:
- 5672:5672
- 15672:15672
healthcheck:
test: rabbitmq-diagnostics -q ping
interval: 30s
timeout: 30s
retries: 3
my_app:
image: my_app
depends_on:
rabbitmq:
condition: service_healthy
Já tive problemas similares Txug0
, infelizmente utilizando o depends do docker, em teoria o container operacional do docker do seu rabbitmq já subiu, mas o rabbit ainda está inciando e subindo os serviços internos.
O que eu fiz para resolver foi que se preciso que a aplicação espere outro serviço iniciar antes dela, eu utilizo utilizar o netcat nc
para testar conexão com o IP e PORTA a cada dois segundos e enquanto não tiver conexão a aplicação não inicia, "travando" o terminal nessa etapa. (segue um exemplo e abixo ou no repo aqui)
entripoint.sh
wait_rabbitmq() {
while ! nc -z 127.0.0.1 5672; do
echo "Aguardando RabbitMQ iniciar..."
sleep 2
done
}
wait_rabbitmq
Tenho um exemplo em um projeto teste que fiz recentemente https://github.com/gabolera/df-php-project/blob/main/worker-importer/entrypoint-node.sh