Django Celery вызывает redis, но я использую RabbitMq в качестве брокера сообщений
Я использую celery и RabbitMq в качестве брокера сообщений с Django и Docker.
После установки образа docker я выполняю следующую команду: docker-compose run --rm web bash чтобы войти в мой контейнер, а затем я запускаю: celery -A wine_shop worker --loglevel=info вместо подтверждения того, что мой borker работает, я получаю следующее сообщение:
[2022-08-31 09:30:57,796: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6380//: Error 99 connecting to localhost:6380. Cannot assign requested address..
Trying again in 2.00 seconds... (1/100)
Я могу заметить, что транспорт неправильный, он должен вызывать транспорт py-amqp, но он вызывает redis.
-------------- celery@4c40607a9f71 v5.2.6 (dawn-chorus)
--- ***** -----
-- ******* ---- Linux-5.15.0-46-generic-x86_64-with-glibc2.31 2022-08-31 09:30:57
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app: wine_shop:0x7f2546178460
- ** ---------- .> transport: redis://localhost:6380//
- ** ---------- .> results:
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
Есть идеи, как решить эту проблему?
Здесь вы можете найти мои файлы конфигурации:
Settings.py
Celery.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
from __future__ import absolute_import, unicode_literals
import os
from django.conf import settings
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wine_shop.settings')
app = Celery('wine_shop')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
Docker-compose.yml
version: "3.8"
services:
web:
build: .
container_name: django2
command: >
sh -c "python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
volumes:
- app_data:/usr/src/app/
ports:
- "8000:8000"
env_file:
- ./env.dev
depends_on:
- pgdb
- rabbitmq
celery:
restart: always
build:
context: .
container_name: celery
command: celery -A wine_shop worker -l info
volumes:
- .:/usr/src/app
env_file:
- ./.env.dev
depends_on:
- pgdb
- web
- rabbitmq
pgdb:
image: postgres
container_name: pgdb
env_file:
- ./.env.dev
volumes:
- pgdata:/var/lib/postgresql/data/
rabbitmq:
image: rabbitmq:3.7-alpine
container_name: 'rabbitmq'
volumes:
pgdata:
app_data:
Спасибо всем!!!
Я столкнулся с похожей проблемой: я настроил свой celery на использование redis, но мое приложение django все еще использовало rabbit mq
если исправить это, добавьте следующие строки в proj/init.py
from .celery import app as celery_app
__all__ = ("celery_app",)
Надеюсь, это поможет кому-нибудь из проходящих здесь