Как установить Django + RabbitMQ + Celery с помощью Docker?

Я пытаюсь настроить мое приложение Django на функциональность push-уведомлений. Для планирования уведомлений я пытаюсь использовать Celery, для брокера сообщений я выбрал RabbitMQ. Мое приложение запущено в контейнерах Docker, и я изо всех сил пытаюсь заставить RabbitMQ работать. Я получаю сообщение об ошибке Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused. при запуске docker-compose up. Вот мои celery и rabbitmq3 сервисы из моего docker-compose.yml:

celery:
    restart: always
    build:
      context: .
    command: celery -A test_celery worker -l info
    volumes:
      - .:/test_celery
    env_file:
      - ./.env
    depends_on:
      - app
      - rabbitmq3
  
rabbitmq3:
  container_name: "rabbitmq"
  image: rabbitmq:3-management-alpine
  ports:
    - 5672:5672
    - 15672:15672

В моем test_celery - приложении у меня есть файл celery.py, который содержит следующее:

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'test_celery.settings')

app = Celery('test_celery')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

И, наконец, в моем settings.py у меня есть это: CELERY_BROKER_URL = 'amqp://localhost'.

Нужно ли мне определить CELERY_BROKER_URL как-то иначе? Что-то не так с моим файлом docker-compose? Буду благодарен за любую помощь, что не так с моей установкой?

это должно помочь

CELERY_BROKER_URL=amqp://guest:guest@rabbitmq3:5672/

если у вас есть vhost на rabbit

CELERY_BROKER_URL=amqp://guest:guest@rabbitmq3:5672/vhost

если не работает, проверьте консоль контейнера rabbit на наличие подсказок

В settings.py define:

RABBITMQ = {
    "PROTOCOL": "amqp", # in prod change with "amqps"
    "HOST": os.getenv("RABBITMQ_HOST", "localhost"),
    "PORT": os.getenv("RABBITMQ_PORT", 5672),
    "USER": os.getenv("RABBITMQ_USER", "guest"),
    "PASSWORD": os.getenv("RABBITMQ_PASSWORD", "guest"),
}

CELERY_BROKER_URL = f"{RABBITMQ['PROTOCOL']}://{RABBITMQ['USER']}:{RABBITMQ['PASSWORD']}@{RABBITMQ['HOST']}:{RABBITMQ['PORT']}"
Вернуться на верх