从add()引发的哪些任务队列异常有意义重试?

时间:2012-02-17 16:04:25

标签: java google-app-engine

我希望在我的(Java)代码中添加一些防御性异常处理/重试逻辑,这些代码将App Engine中的任务排入队列。在审查文档中提出的潜在异常时,我看到几个候选人可能有意义地抓住并处理重试,但文档有点模糊,所以我想我会看到别人发现的值得的。

以下是我正在查看的内容,以及他们对文档的描述:

  • InternalFailureException - 内部任务队列错误。
  • TransientFailureException - 间歇性失败。
  • QueueFailureException - 未指定的队列失败。
  • TransactionalTask​​Exception - 数据存储异常导致的队列操作失败。

文档明确建议重试可能有用的唯一一个是TransientFailureException。

另外,关于TransactionalTask​​Exception,这是否只有在封闭数据存储区事务中登记任务时才会出现,或者在排队独立任务时是否会出现这种情况?

1 个答案:

答案 0 :(得分:0)

我在App Engine google小组中收到了有关此问题的一些反馈(请参阅this thread),所以我想我会在此发布摘要以使其他人受益。

对GAE source的一些检查显示:

  • 内部错误代码TASK_ALREADY_EXISTS和TOMBSTONED_TASK都映射到TaskAlreadyExistsException
  • TransactionalTask​​Exception用于出现的所有数据存储错误。
  • 对于没有显式映射异常类型的任何内部错误代码,QueueFailureException是一个包罗万象的例外

Robert Kluin也提出了以下建议(在此解释):

  • 考虑处理TaskAlreadyExistsException。重试没有意义,但在某些情况下,您可能想要吞下该错误,而在其他情况下则提高它。
  • 考虑处理截止日期和超时。特别是,他提到超时可以伪装成内部错误(Java中的InternalFailureException)。
相关问题