问题描述
如何将 Flower 连接到 RabbitMQ。我的 celery 运行任务没有出现在 Flower 上。虽然他们运行良好。在 Flower UI 上,当我单击“broker”时,我在终端上收到此错误消息 [E 210326 10:53:07 broker:78] RabbitMQ management API call Failed: Timeout while connecting
这是我的 docker-compose 文件:
version: "3.8"
services:
base:
container_name: base
image: postgres:13
ports:
- "5433:5432"
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- /var/lib/postgresql/data
api:
build:
context: ./api/
dockerfile: Dockerfile
volumes:
- ./api/app:/app/app
ports:
- "1000:80"
depends_on:
- base
env_file:
- .env
command: ["/start-reload.sh"]
frontend:
build:
context: ./frontend/
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- /app/node_modules
- ./frontend:/app
environment:
- NODE_ENV=development
stdin_open: true
links:
- api
rabbitmq:
image: "bitnami/rabbitmq:latest"
ports:
- "4369:4369"
- "5672:5672"
- "25672:25672"
- "15672:15672"
volumes:
# - "rabbitmq_data:/bitnami"
- /bitnami
redis:
image: "bitnami/redis:latest"
environment:
- REdis_PASSWORD=password123
ports:
- "6379:6379"
volumes:
# - "redis_data:/bitnami/redis/data"
- /bitnami/redis/data
flower:
image: mher/flower
command: ["flower","--broker=amqp://user:bitnami@rabbitmq:5672//","--port=8888"]
ports:
- 8888:8888
depends_on:
- rabbitmq
- redis
worker:
build:
context: ./api/
dockerfile: Dockerfile.celery
depends_on:
- rabbitmq
- redis
volumes:
- ./api/app:/app
command: celery -A app.worker.celery_worker worker --loglevel=INFO --concurrency=4 -Q test-queue
解决方法
我在过去三天的测试中也遇到了同样的问题。在测试期间,Flower 仅正确工作一次。我当时没能确定它为什么起作用。
对我来说,解决这个问题的唯一方法是将 docker 镜像从 mher/flower:latest
或 mher/flower:0.9.7
降级到 mher/flower:0.9.5
。更改命令行选项、环境变量和 docker-compose.yml 内容没有帮助。降级后一切正常。
笔记。我的环境是
- 机器 - 带有 WSL2 的 Windows 10
- 主要 - ubuntu:20.04 与 Django 3.1.7,celery[librabbitmq,redis] 5.0.5,django-celery-beat 2.2.0
- Celery Broker - rabbitmq:management
- Celery ResultBackend - redis:latest
- 芹菜花 - mher/flower:latest > mher/flower:0.9.5
我已经在 Flower 项目中打开了一个问题,如果我有空闲时间,我会尝试解决这个问题,但同时在调查部分,您应该会看到原因。
github 中的问题:https://github.com/mher/flower/issues/1112
,您需要添加网络才能将它们组合在同一网络中。之后,您可以使用服务名称作为主机名。喜欢rabbitmq
version: "3.8"
services:
base:
container_name: base
image: postgres:13
ports:
- "5433:5432"
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- /var/lib/postgresql/data
networks:
- app-network
api:
build:
context: ./api/
dockerfile: Dockerfile
volumes:
- ./api/app:/app/app
ports:
- "1000:80"
depends_on:
- base
env_file:
- .env
command: ["/start-reload.sh"]
networks:
- app-network
frontend:
build:
context: ./frontend/
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- /app/node_modules
- ./frontend:/app
environment:
- NODE_ENV=development
stdin_open: true
links:
- api
networks:
- app-network
rabbitmq:
image: "bitnami/rabbitmq:latest"
ports:
- "4369:4369"
- "5672:5672"
- "25672:25672"
- "15672:15672"
volumes:
# - "rabbitmq_data:/bitnami"
- /bitnami
networks:
- app-network
redis:
image: "bitnami/redis:latest"
environment:
- REDIS_PASSWORD=password123
ports:
- "6379:6379"
volumes:
# - "redis_data:/bitnami/redis/data"
- /bitnami/redis/data
networks:
- app-network
flower:
image: mher/flower
command: ["flower","--broker=amqp://user:bitnami@rabbitmq:5672//","--port=8888"]
ports:
- 8888:8888
depends_on:
- rabbitmq
- redis
networks:
- app-network
worker:
build:
context: ./api/
dockerfile: Dockerfile.celery
depends_on:
- rabbitmq
- redis
volumes:
- ./api/app:/app
command: celery -A app.worker.celery_worker worker --loglevel=INFO --concurrency=4 -Q test-queue
networks:
- app-network
networks:
app-network:
driver: bridge
,
你可以使用这个 docker-compose 文件:
version: '3.4'
services:
rabbitmq:
image: rabbitmq
ports:
- 5672:5672
flower:
image: mher/flower
environment:
- CELERY_BROKER_URL=pyamqp://guest@rabbitmq//
- FLOWER_PORT=5555
ports:
- 5555:5555
depends_on:
- rabbitmq
*** 切记不要对 CELERY_BROKER_URL 值使用单引号!!以下配置将引发错误:
- CELERY_BROKER_URL='pyamqp://guest@rabbitmq//'