我遇到了一個奇怪的問題,其中一些任務在發送給經紀人後被丟棄。這發生在10個任務中的大約1個。我已經檢查過,沒有老芹菜工人正在消耗這項工作。發送到rabbitmq經紀商後,芹菜任務丟失
我用數據庫後臺和花來監視丟失的任務,但apply_async之後返回的task_id不存在於數據庫或花中。它的狀態總是等待。
然後我用芹菜信號來找出發生了什麼。我發現,對於丟失的任務,只有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