django celery SQS "Бэкэнд-результат не настроен." - PullRequest
0 голосов
/ 31 мая 2018

Не является дубликатом Сельдерей: не задан бэкэнд-результат? , поскольку используется SQS.

Продолжает появляться следующая ошибка:

Бэкэнд-результат не настроен,Пожалуйста, смотрите документацию для получения дополнительной информации.

Мои производственные настройки следующие:

CELERY_BROKER_URL = 'sqs://%s:%s@' % (
    urllib.parse.quote(env.str('TASK_QUEUE_USER_ID'), safe=''),
    urllib.parse.quote(env.str('TASK_QUEUE_USER_SECRET'), safe=''))

BROKER_URL = CELERY_BROKER_URL
CELERY_ENABLE_REMOTE_CONTROL = False
CELERY_RESULT_BACKEND = None # Disabling the results backend
RESULT_BACKEND = None # Disabling the results backend

CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_DEFAULT_QUEUE = 'async_tasks'
SQS_QUEUE_NAME = 'async_tasks'
CELERY_ENABLE_REMOTE_CONTROL = False 
CELERY_SEND_EVENTS = False


CELERY_BROKER_TRANSPORT_OPTIONS = {
    'region': 'eu-west-2',
    'polling_interval': 3,
    'visibility_timeout': 3600,
}
CELERY_SEND_TASK_ERROR_EMAILS = True

#
# /6174063/selderei-s-amazon-sqs#6174100
#
CELERY_BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT = 'sqs'

Запуск сельдерея из командной строки: DJANGO_ENV=production celery -A async_tasks worker -l info подключается к SQS и опросам, нокогда я пытаюсь сделать демонстрационный вызов из командной строки DJANGO_ENV=production python manage.py check_async:

from django.core.management.base import BaseCommand, CommandError

import async_tasks.tasks as tasks


class Command(BaseCommand):
    help = 'Check if infrastructure for async tasks has been setup correctly.'

    def handle(self, *args, **options):
        try:
            print('Sending async request.')
            t = tasks.add.apply_async((2, 4))
            out = t.get(timeout=1)
            print(out)
            print(t.status)
        except Exception as e:
            print(e)
            raise CommandError('Error occured')

, я получаю сообщение об ошибке выше.Попробовал в разработке машину с redis и все хорошо работает.

Есть идеи?

1 Ответ

0 голосов
/ 08 февраля 2019

Вам необходим бэкэнд Celery Result Backend, чтобы иметь возможность хранить и собирать результаты задач.Использование Celery с SQS-брокером без бэкэнда результатов вполне подходит для шаблонов «запускай и забывай», но этого недостаточно, если вы хотите иметь возможность доступа к результатам ваших задач с помощью таких методов, как get ().

...