如何用Django和Celery使用Redis的特定房间和队列?

问题描述 投票:0回答:0

如何使用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-devworker-dev 也使用相同的Redis容器,但在不同的房间里。redis. 原因是,目前每当一个任务被推送到了 redis 通过 api-dev 它被 worker 有时是通过 worker-dev. 作为 api-dev 一般是我的暂存服务器。它总是最新的,而 api 是一个旧的,经过测试,我们把它部署在主服务器上。正因为如此,当任务被推送到 redis 通过 api-dev 不应被 worker.

一个简单的解决方案可能是使用一个单独的 redis 容器。这应该能解决这个问题,但我也无法做到。因为它说,它无法将请求的地址分配给 redis-dev 容器。另外,是的,我使用了不同的端口来进行 redis-dev.

另外,如何设置任务的优先级?

django docker redis celery django-celery
© www.soinside.com 2019 - 2024. All rights reserved.