Итак, я использую сельдерей с RabbitMQ. У меня есть RESTful API, который регистрирует пользователя. Я использую удаленный работник Сельдерей, чтобы отправить регистрационное письмо асинхронно, чтобы мой API мог быстро реагировать.Сельдерей Почему задача остается в очереди
from .tasks import send_registration_email
def register_user(user_data):
# save user to the database etc
send_registration_email.delay(user.id)
return {'status': 'success'}
Это прекрасно работает. Электронная почта отправляется в неблокируемом асинхронном режиме (и может быть проведена повторная попытка, если это не помогает). Проблема в том, что я смотрю на консоль управления RabbitMQ. Я вижу, что send_registration_email создал случайную очередь. Что-то вроде:
Я могу видеть, что задача была успешно выполнена. Итак, почему случайная очередь остается на RabbitMQ навсегда? Это полезная нагрузка задача:
{"status": "SUCCESS", "traceback": null, "result": true, "task_id": "aad10877-3508-4179-a5fb-99f1bd0b8b2f", "children": []}
Да. Я понял это в то же время. Я добавил ignore_result = True для аннотаций задачи. Является ли хорошей практикой игнорировать результаты? У меня много задач, которые не возвращают никаких результатов (множество задач для отправки писем, логов, отчетов и задач обслуживания и т. Д.), Поэтому я проигнорирую их результаты. –
Вы читаете какие-либо результаты в других задачах RabbitMQ? В этом случае удаление RESULT_BACKEND - лучшее решение, я думаю. – Rustem
У меня есть задачи, из которых я читаю результаты, поэтому я не могу просто отключить результирующий сервер. На самом деле моя SOA работает на AMQP. Вместо SOAP мои сервисы говорят друг с другом по RabbitMQ/Celery. –