如何使用一个特定的房间和排队的redis与django和celery ?

iyfamqjs  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(271)

我如何用django和celery 设置redis服务器的特定房间?我已经通过这里的文档进行了设置:https://docs.celeryproject.org/en/stable/django/first-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 .
另外,如何设置任务的优先级?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题