Celery OperationalError [Errno 111] Отказ в подключении
У меня есть один важный вопрос, который беспокоит меня уже 2 последних дня. У меня есть контейнеры django, postgres и rabbitmq в docker. Я хочу соединить celery с rabbitmq, но если я делаю это через контейнер django (docker-compose exec web celery -A myshop worker -l info), он не соединяется вообще. Что я только не пробовал - ничего не получается. Получаю ошибку 111 connection refused. Если я делаю прямо (celery -A myshop worker -l info), он работает и подключается, но как только задание завершается, я получаю ту же проблему - ошибка 111. Пожалуйста, помогите мне.
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
environment:
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
depends_on:
- db
rabbitmq:
image: rabbitmq:3.11.8-management-alpine
ports:
- "5672:5672"
- "15672:15672"
volumes:
- ./.docker/rabbitmq/data/:/var/lib/rabbitmq/
init.py
from .celery import app as celery_app
__all__ = ['celery_app']
celery.py
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')
app = Celery('myshop')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
tasks.py
from celery import shared_task
from django.core.mail import send_mail
from .models import Order
@shared_task
def order_created(order_id):
"""Task to send an e-mail notification when an order is successfully created."""
order = Order.objects.get(id=order_id)
subject = f'Order nr. {order.id}'
message = f'Dear {order.first_name},\n\n You have successfully placed an order. Your order ID is {order.id}.'
mail_sent = send_mail(subject, message, 'admin@myshop.com', [order.email])
return mail_sent
В файле views.py я использую функцию .delay() order_created.delay(order.id)
Я использовал CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672' - не работаетt work I created a new rabbitmq user - doesn
.
Хотя может я что-то перепутал в томах rabbitmq, потому что мой пользовательt persisted I
перепробовал все решения, относящиеся к этой проблеме, и никто не помогает