Как использовать определенную c комнату и очередь Redis с Django и Celery? - PullRequest
0 голосов
/ 18 июня 2020

Как мне настроить определенную c комнату моего сервера Redis с Django и Celery? Я настроил его с помощью документации, представленной здесь: https://docs.celeryproject.org/en/stable/django/first-steps-with-django.html

Проблема в том, что я хочу запустить реплики Django или, точнее, c Я хочу запустить промежуточный сервер в том же контейнере Redis. Вот мой 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.

Кроме того, как мне установить приоритет задач?

...