在谷歌应用程序引擎任务队列中处理最大重试次数后的失败



我使用谷歌api python客户端,并使用谷歌应用程序引擎任务队列进行一些异步操作。

对于特定的任务队列,我还设置了应该重试任务的最大次数(在我的情况下,重试不太可能成功,所以我想限制它们)。

有没有一种方法可以编写一个处理程序来处理即使在指定的重试次数之后任务仍然失败的情况?

基本上,如果我的重试限制是5,在5次重试失败后,我想将任务移动到另一个队列,在那里可以重试更多次,重试间隔更大,这样就更有可能成功。

从这里开始,我相信我可以在每次重试中使用X-AppEngine-TaskExecutionCount标头,并编写一些自定义逻辑来知道任务将在何时执行并实现这一点,但我正在尝试找出是否有更干净的方法。

顺便说一句,X-AppEngine-TaskExecutionCount指定(从文档),此任务以前在执行阶段失败的次数。此数字不包括由于缺少可用实例而导致的故障

至少目前不支持自动将任务从一个队列移动到另一个队列。

一种选择是将任务保持在同一队列上,增加最大重试次数,并使用retry_parameters自定义重试回退策略(即重试间隔时间的增加):

重试参数

可选。配置失败任务的重试次数。此添加允许您指定重试失败的最大次数特定队列中的任务。您还可以设置重试时间限制尝试并控制尝试之间的间隔。

重试参数可以包含以下子元素:

  • task_retry_limit

    失败任务的最大重试次数。如果使用task_age_limit指定,则应用程序引擎会重试该任务,直到两个极限都达到了。如果指定了0,则任务将不会重试。

  • task_age_limit(推送队列)

    重试失败任务的时间限制,从任务首次运行时开始计算。该值是一个数字,后跟一个时间单位,其中单位为s秒,m分钟,h小时,或d天。例如,值5d指定任务第一次执行尝试后五天的限制。如果使用task_retry_limit指定,应用程序引擎将重试该任务,直到两个极限都达到了。

  • min_backoff_seconds(推送队列)

    任务失败后重试任务之前等待的最小秒数。

  • max_backoff_seconds(推送队列)

    任务失败后重试任务之前等待的最大秒数。

  • max_doublings(推送队列)

    失败的任务重试间隔在增加为常数之前将加倍的最大次数。这个常数为:2**max_doublings * min_backoff_seconds**

但增加的模式将是渐进的——每次失败后都会翻倍,你无法获得显著的"阶梯"式的重试间隔时间增加。尽管如此,它可能是一个足够好的解决方案,不需要额外的编码。就我个人而言,我会选择这种方法。

另一种方法是添加该逻辑,以确定该执行是否是原始任务的最后重试,如果是,则将新的相应任务排入具有所需"较慢"重试策略的不同队列。我不确定这是否是你在问题中所指的并想避免的。

最新更新