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>
>>>
Но я не вижу, чтобы что-то происходило на моем терминале сельдерея. Похоже, что мой сельдерей не получил никакого задания/сообщения
Пожалуйста, подскажите, что нужно проверить или что сделать, чтобы решить эту проблему.