如何使用Django和Celery来设置Redis服务器的特定房间?https:/docs.celeryproject.orgenstabledjangofirst-steps-with-django.html。
问题是我想运行Django的副本,或者更具体地说,我想在同一个Redis容器中运行一个staging服务器。以下是我的 docker-compose.yml
档案
version: "3.7"
services:
api:
container_name: api
ports:
- "5000:5000"
image: test/api:v0.19
environment:
- PYTHONUNBUFFERED=1
- PROD_MODE=False
- CELERY_BROKER_URL=redis://redis
restart: always
volumes:
- ./secret:/secret
depends_on:
- redis
- worker
entrypoint: "gunicorn -c gunicorn_config.py app.wsgi --bind 0.0.0.0:5000"
worker:
container_name: worker
image: test/api:v0.19
restart: always
environment:
- PYTHONUNBUFFERED=1
- PROD_MODE=False
- CELERY_BROKER_URL=redis://redis
volumes:
- ./secret:/secret
depends_on:
- redis
entrypoint: "celery -A app worker -l info"
api-dev:
container_name: api-dev
ports:
- "8888:5000"
image: test/api:v0.19
environment:
- PYTHONUNBUFFERED=1
- PROD_MODE=False
- CELERY_BROKER_URL=redis://redis
restart: always
volumes:
- ./secret:/secret
depends_on:
- redis-dev
- worker-dev
entrypoint: "gunicorn -c gunicorn_config.py app.wsgi --bind 0.0.0.0:5000"
worker-dev:
container_name: worker-dev
image: test/api:v0.19
restart: always
environment:
- PYTHONUNBUFFERED=1
- PROD_MODE=False
- CELERY_BROKER_URL=redis://redis
volumes:
- ./secret:/secret
depends_on:
- redis-dev
entrypoint: "celery -A app worker -l info"
redis:
container_name: redis
hostname: redis
image: redis:6.0.3
ports:
- "6379:6379"
restart: always
command: ["redis-server", "--bind", "redis", "--port", "6379"]
volumes:
- ./data:/data
- ./redis.conf:/redis.conf
- ./redis:/var/lib/redis
现在我想要的是 api-dev
和 worker-dev
也使用相同的Redis容器,但在不同的房间里。redis
. 原因是,目前每当一个任务被推送到了 redis
通过 api-dev
它被 worker
有时是通过 worker-dev
. 作为 api-dev
一般是我的暂存服务器。它总是最新的,而 api
是一个旧的,经过测试,我们把它部署在主服务器上。正因为如此,当任务被推送到 redis
通过 api-dev
不应被 worker
.
一个简单的解决方案可能是使用一个单独的 redis
容器。这应该能解决这个问题,但我也无法做到。因为它说,它无法将请求的地址分配给 redis-dev
容器。另外,是的,我使用了不同的端口来进行 redis-dev
.
另外,如何设置任务的优先级?