标签: redis rabbitmq celery
如果工作人员运行的服务器死了,是否有办法重试芹菜作业?我不只是指执行作业的子进程,而是整个服务器都不可用。
我尝试使用RabbitMQ和Redis作为经纪人。在这两种情况下,如果当前正在处理作业,则完全忘记了它。当一个工人重新启动时,它甚至都没有尝试重新处理这个工作,看着Rabbit或Redis,他们的队列是空的。结果后端也是空的。
看起来工作人员抓取消息并假设它会在子进程失败时将其恢复,但如果工作者也死了,它就无法将其恢复。
(是的,我的工作环境每年发生一次以上,而且我不想丢失任务)
答案 0 :(得分:2)
理论上,设置visibility_timeout应该可以解决问题。 (doc)
visibility_timeout
使用Redis代理,该任务将在@Id之后重新传递,默认为一小时。 (doc)
@Id
使用RabbitMQ,只要兔子发现工人死亡,就会重新交付任务。