У меня возникла странная проблема, когда некоторые из моих задач падают после отправки брокеру. Это происходит примерно в 1 из 10 задач. Я проверил, что нет старого работника сельдерея, потребляющего эту задачу.Задачи сельдерея Утеряны после отправки брокеру rabbitmq
Я использовал базу данных с поддержкой backend и flower для отслеживания недостающих задач, но task_id вернулся после того, как apply_async отсутствует в базе данных или в цветке. Его статус всегда приходит в ожидании.
Затем я использовал сигналы сельдерея, чтобы узнать, что происходит. Я обнаружил, что для недостающих задач только before_task_publish и after_task_publish сигналы увольняются. Опубликуйте, что для этой задачи нет следов.
Это мои сигналы
@before_task_publish.connect
def before_task_publish_handler(sender=None, headers=None, body=None, **kwargs):
# information about task are located in headers for task messages
# using the task protocol version 2.
logger.info("BEFORE TASK SENT id:"+body['id'])
@after_task_publish.connect
def after_task_publish_handler(sender=None, headers=None, body=None, exchange=None, routing_key=None, **kwargs):
# information about task are located in headers for task messages
# using the task protocol version 2.
logger.info("AFTER TASK SENT id:"+body['id'])
@task_prerun.connect
def task_prerun_handler(sender=None, task_id=None, task=None, **kwargs):
logger.info("TASK PRERUN with TASK_ID:"+str(task_id))
Это то, что я нашел в журналах
$ cat gunicorn-access.log | grep -i 103de274-00dc-4765-844f-d319e9e199c2
BEFORE TASK SENT id: '103de274-00dc-4765-844f-d319e9e199c2'
AFTER TASK SENT id: '103de274-00dc-4765-844f-d319e9e199c2'
Я не уверен, является ли задача игнорируется RabbitMQ или его молча упал на какой-то причине.
Вы нашли причину? – melih