Django celery с redis, celery worker не получает сообщений

У меня есть проект django с celery

Вот мой proj/settings.py (только части с сельдереем)


    # -----CELERY
    CELERY_TIMEZONE = "Asia/jakarta"
    CELERY_BROKER_URL = "redis://localhost"
    CELERY_TASK_DEFAULT_QUEUE ='taibridge'
    CELERY_DEFAULT_QUEUE ='taibridge'
    CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True
    # ---EOF-CELERY

и вот мой proj/celery.py

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'main.settings')
app = Celery('main')
app.config_from_object('django.conf:settings', namespace='CELERY')


Запустив рабочий из консоли, я получил

вот мой taibridge/tasks.py

import logging, traceback
import json

from celery import shared_task
from django.conf import settings
from taibridge.models import Post, PostStatus
from taibridge.taiga_tools import TaigaTools

logger = logger = logging.getLogger(__name__)

taiga_tools = TaigaTools()

@shared_task
def post_to_taiga(post_id,trial:int=0):
    try :
        postObj = Post.objects.get(id=post_id)
    except Post.DoesNotExist as e:
        return
    except Exception as e:
        logger.error(traceback.format_exc())
        return

    project_name = postObj.caller.scrum.name

    sprint_prefix = postObj.caller.scrum.sprint_prefix
    sprint_suffix = postObj.received_at.strftime('%b %Y')
    sprint_name = f'{sprint_prefix} {sprint_suffix}'

    # THIS IS SUCK !!!
    # Find some way to make it DYNAMIC !!!!!
    us_subject = 'Alert'

    ts_text = postObj.received_at.strftime('%Y-%m-%d %H:%M:%S')

    task_subject = f'by {postObj.caller.name} at {ts_text}'
    task_description = postObj.message

    try :
        task_description = json.loads(task_description)
        task_description = json.dumps(task_description, indent='\t')
    except Exception:
        pass

    posted = False
    status = None
    try :
        taiga_tools.create_task(subject=task_subject, description=task_description,
            user_story=us_subject, sprint=sprint_name, project=project_name)
        status = "POSTED"
    except Exception as e:
        logger.warn(traceback.format_exc())
        countdown = trial+2
        trial += 1
        try :
            post_to_taiga.apply_async((post_id, trial), countdown=countdown)
            status = f'REQUEUED: {trial}'
        except Exception as e:
            err = traceback.format_exc()
            status = err
            logger.error(err)
    
    new_status = PostStatus()
    new_status.post = postObj
    new_status.status = status
    new_status.save()

Я пытаюсь отправить некоторое задание через django shell

(venv) bino@taiga-project:~/TaiBridge$ ./manage.py shell
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from taibridge.tasks import post_to_taiga
>>> post_to_taiga.delay("XYZ")
<AsyncResult: f7830aae-2f80-4207-a657-7e08f9715784>
>>> post_to_taiga.delay("XYZ")
<AsyncResult: a388126c-1ace-4c5a-a805-f7ba3b5edd90>
>>> 

Но я не вижу, чтобы что-то происходило на моем терминале сельдерея. Похоже, что мой сельдерей не получил никакого задания/сообщения

Пожалуйста, подскажите, что нужно проверить или что сделать, чтобы решить эту проблему.

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