我们使用带有rabbitMQ后端的celery,我们的一些服务器挂起并出现错误:“[Errno 113]没有到主机的路由”(这可能是因为我们一半的服务器在美国,一半在欧洲)。
我需要确保每个任务都已交付,不幸的是我不知道如何重试使用 send_task/string 标识符发送的任务(发送任务的服务器无法访问远程工作人员的代码)像这样:
send_task("remote1.tasks.add_data", args=[...], kwargs={}, queue="remote1")
是否可以重试此类任务?
最佳答案
sent_task 仅将消息发送到代理,如果调用 send_task 的服务器上引发异常,则消息可能根本没有到达代理,因此没有要重试的任务,而只是要处理的异常。 否则,如果所有工作人员由于某种原因无法联系到代理而随机引发此异常,您可能可以通过将 celery conf vars 设置为 true 来解决
CELERY_ACKS_LATE = 真
“延迟确认意味着任务消息将在任务执行后确认,而不是之前,这是默认行为。” 这意味着,如果在工作程序中执行任务期间出现问题,代理将不会收到确认,而另一个工作程序将执行该任务。
关于celery - 在celery中重试 'send_task'发送的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835708/