【发布时间】:2011-07-30 15:32:06
【问题描述】:
我想在分布式环境中使用带有 rabbitmq 的 celery 作为容错调度程序。 通过容错,我的意思是如果将任务分配给工作人员并且该工作人员由于任何原因而停机,芹菜应该能够将其重新安排到另一台服务器。 如何在有多个工作节点的环境中实现这一点?
【问题讨论】:
我想在分布式环境中使用带有 rabbitmq 的 celery 作为容错调度程序。 通过容错,我的意思是如果将任务分配给工作人员并且该工作人员由于任何原因而停机,芹菜应该能够将其重新安排到另一台服务器。 如何在有多个工作节点的环境中实现这一点?
【问题讨论】:
您可能只需要设置 CELERY_ACKS_LATE
Late ack 意味着任务消息将在任务执行后得到确认,而不是之前,这是默认行为。这样如果worker crash rabbit MQ还是有消息的。
这里有更多信息
【讨论】:
让每个工人从同一个队列中消费,Rabbit 会将消息轮询给工人(消费者)。如果其中任何一个在处理作业时失败并且在它有机会发送确认之前,该消息将自动放回队列中,并且下一个工作人员将接收它。这是一种“至少一次”交付模式。
来自 RabbitMQ 站点的This link 解释了该模式并包含 Python 示例代码。
【讨论】: