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",)

Надеюсь, это поможет кому-нибудь из проходящих здесь

Вернуться на верх