Celery для отдельных микросервисов django docker

У меня есть 2 микросервиса django main_ms и Oms1_ms.

у обоих project название config и у обоих они установлены

redis==4.3.4
celery==5.2.7
celery[redis]==5.2.7

у обоих celery.py. main_ms's выглядит следующим образом

import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

и для Oms1_ms, вместо proj у меня oms1_oms1

в обоих __init__.py у меня есть

from .celery import app as celery_app
__all__ = ('celery_app',)

в обеих настройках я обеспечил

CELERY_BROKER_URL='redis://redis:6379/0'
CELERY_RESULT_BACKEND='redis://redis:6379/0'

из одного из представлений, которое у меня есть в main_ms, которое называет другое сельдереем

from config.celery import app
from rest_framework import views
from rest_framework import status
from rest_framework.response import Response
class Oms1_Oms1ListView(views.APIView):
    def get(self, request, *args, **kwargs):
        remoteResponse = app.send_task('oms1_oms1.fun')
        print(remoteResponse)
        return Response({}, status=status.HTTP_200_OK)

и в Oms1 приложении в Oms1_ms контейнере в tasks.py у меня есть

from config.celery import app
@app.task()
def fun():
    return 'as always!!'

поэтому, когда я запускаю команду celery -A oms1_oms1 worker -l DEBUG в контейнере Oms1, я получаю эту ошибку

Error: Invalid value for '-A' / '--app':
Unable to load celery application.
The module oms1_oms1 was not found.

Итак, как правильно установить celery с django docker microservices?

Я также знаю, что одно из применений celery - это обработка рабочих нагрузок внутри сервиса. но найти пример использования celery для микросервисов с условиями ниже оказалось для меня непосильной задачей.

  1. все проекты django являются отдельными, каждый в своем контейнере, и у них нет общей родительской папки, поэтому при вызове задач мы не можем импортировать обрабатывающую их функцию, в отличие от @shared_task из celery.
  2. здесь показано, как запустить команду celery worker.
  3. как настроить и подключить экземпляры celery к rabbit/redis или mongodb.

вам нужно задать путь к директории, в которой находится ваш файл конфигурации celery, с помощью __init__.py, например, если мой файл конфигурации celery находится в каталоге settings/celery_config.py, команда будет выглядеть следующим образом

celery -A settings worker -l info
# or
celery -A settings.celery_config worker -l info
Вернуться на верх