Estoy tratando de configurar mi aplicación Django para que tenga la funcionalidad de notificación automática. Para programar notificaciones, estoy tratando de usar Celery, para el agente de mensajes elegí RabbitMQ. Mi aplicación se ejecuta en contenedores Docker y estoy luchando para que RabbitMQ funcione. Recibo un mensaje de error Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused. al ejecutar docker-compose up . Aquí están mis servicios de celery y rabbitmq3 de mi 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 En mi test_celery -app tengo un archivo llamado celery.py que contiene lo siguiente:
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() Y finalmente, en mi settings.py tengo esto: CELERY_BROKER_URL = 'amqp://localhost' .
¿Debo definir CELERY_BROKER_URL alguna manera diferente? ¿Hay algún problema con mi archivo docker-compose? Agradecería cualquier ayuda con esto, ¿qué pasa con mi configuración?
Esto debería funcionar
CELERY_BROKER_URL=amqp://guest:guest@rabbitmq3:5672/si tienes un vhost en conejo
CELERY_BROKER_URL=amqp://guest:guest@rabbitmq3:5672/vhostsi no funciona revisa la consola del contenedor del conejo en busca de pistas
En settings.py definir:
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']}"