Celery 工人服务忽略经纪人 url

Celery worker service ignoring broker url

我正在尝试在我的 django 应用程序中使用 Celery 并将 Redis 作为代理。

在我的设置文件中,我设置了 CELERY_BROKER_URL='redis://redis:6379'CELERY_RESULT_BACKEND='redis://redis:6379' 我的 docker-compose 文件看起来像这样

web: 
    build: 
      context: ./web/
      dockerfile: Dockerfile
    image: &web web
    env_file:
      - .env
    command: "gunicorn web.wsgi:application -w 2 -b :4000"
    volumes:
      - ./web/:/web
    expose:
      - "4000"
    depends_on:
      - db
      - redis
      - worker
      - beat

db:
    build:
      context: ./database/
      dockerfile: Dockerfile
    volumes:
      - data:/var/lib/postgresql/data
    env_file:
      - .env
    expose:
      - "5432"

redis:
    build:
      context: ./cache/
      dockerfile: Dockerfile
    expose:
      - "6379"

worker:
    build:
      context: ./web/
      dockerfile: Dockerfile
    image: *web
    command: "celery -A web worker -l debug"
    ports: []
    depends_on:
      - redis
      - db

beat:
    build:
      context: ./web/
      dockerfile: Dockerfile
    image: *web
    command: "celery -A web beat -l info"
    ports: []
    depends_on:
      - redis
      - db

当我 运行 docker-compose up 时,beat 服务启动良好,但 worker 失败并出现错误

consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused

worker 服务以某种方式尝试使用 rabbitmq 作为代理

请有人帮助阐明我在这里做错了什么。

我自己修好了。

我们需要将设置文件中的CELERY_BROKER_URL替换成如下

# Celery
CELERY_BROKER_URL = 'redis://broker/0'

上面broker引用了docker-compose.yml.

中的服务名称

之前是这样的

CELERY_BROKER_URL = 'redis://localhost:6379/0'

我的docker-compose.yml文件如下

#.... other services here 
broker:
    image: redis:alpine
    expose: 
        - "6379"
celery:
    build: ./myapp
    command: celery -A myapp worker -l info
    env_file:
        - .env
    volumes:
        - ./myapp:/opt/myapp
    depends_on:
        - broker
        - db