【问题标题】:Retrying tasks sent by 'send_task' in celery重试芹菜中“send_task”发送的任务
【发布时间】:2011-10-13 17:21:59
【问题描述】:

我们将 celery 与 rabbitMQ 后端一起使用,我们的一些服务器挂起并出现错误:“[Errno 113] No route to host”(这可能是因为我们一半的服务器在美国,一半在欧洲)。

我需要确保每个任务都已交付,不幸的是我不知道如何重试使用 send_task/字符串标识符发送的任务(发送任务的服务器无法访问远程工作者的代码) 像这样:

send_task("remote1.tasks.add_data", args=[...], kwargs={}, queue="remote1")

这样的任务可以重试吗?

【问题讨论】:

    标签: celery


    【解决方案1】:

    sent_task 仅将消息发送到代理,如果在调用 send_task 的服务器上引发异常,则消息可能根本没有到达代理,没有重试的任务,只是要处理的异常. 否则,如果您的所有工作人员由于某种原因无法联系到代理而随机引发此异常,您可能可以通过将 celery conf vars 设置为 true 来解决

    CELERY_ACKS_LATE = 真

    “延迟确认意味着任务消息将在任务执行后得到确认,而不是之前,这是默认行为。” 这意味着,如果在 worker 执行任务期间出现问题,broker 不会收到确认,另一个 worker 将执行该任务。

    【讨论】:

      猜你喜欢
      • 2017-03-12
      • 1970-01-01
      • 2019-04-07
      • 2017-10-14
      • 2011-12-03
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 2020-04-25
      相关资源
      最近更新 更多