如果芹菜工人死了,工作会重试吗?

2024-02-13

如果运行工作程序的服务器挂掉,是否有办法重试 celery 作业?我指的不仅仅是执行作业的子进程,而是整个服务器变得不可用。

我尝试使用 RabbitMQ 和 Redis 作为代理。在这两种情况下,如果当前正在处理作业,则它会被完全遗忘。当工作进程重新启动时,它甚至不会尝试重新处理作业,并且查看 Rabbit 或 Redis,它们的队列是空的。结果后端也是空的。

看起来工作进程抓取了消息,并假设如果子进程失败,它将把它放回去,但如果工作进程也死了,它就不能把它放回去。

(是的,我工作的环境每年都会发生不止一次这种情况,我不想丢失任务)


理论上,设task_acks_late=True应该可以解决问题。 (doc http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-task_acks_late)

使用 Redis 代理,任务将在visibility_timeout,默认为一小时。 (doc http://docs.celeryproject.org/en/latest/getting-started/brokers/redis.html#redis-visibility-timeout)

使用 RabbitMQ,一旦 Rabbit 发现工作线程死亡,任务就会重新交付。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果芹菜工人死了,工作会重试吗? 的相关文章

随机推荐