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 для микросервисов с условиями ниже оказалось для меня непосильной задачей.
- все проекты django являются отдельными, каждый в своем контейнере, и у них нет общей родительской папки, поэтому при вызове задач мы не можем импортировать обрабатывающую их функцию, в отличие от
@shared_task
из celery. - здесь показано, как запустить команду celery worker.
- как настроить и подключить экземпляры 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