celery+redis unack队列问题
powered by roger丶c
问题描述
使用redis作为celery的中间件时,redis队列可能会出现unacked队列
产生原因
一、消费者
1)worker处理速度慢,worker在等待执行,此时会将任务放在unacked队列中等待worker执行
2)没有返回ack,对于开启手动确认机制的,不进行ack消息会一直以unacked的状态留在队列中
二、生产者
celery对消息确认确认采用的是early_ack,既在消费者执行task之前,就已经向redis发送确认消息了。生产者使用apply_async或send_task发送定时任务也会将此任务放入unack队列中,等待执行。