使用 GAE 任务队列处理持久性操作

Using GAE Task Queues for handling persistence operations

希望就将持久性操作移交给任务队列是否是个好主意征求意见。比如用户提交一个新的'order',我用bean validation验证一切正常,然后把订单的processing/persisting交给一个任务队列,更快的响应用户.

我的犹豫是持久性 'could' 失败,但是一旦我验证了 bean,这种可能性就很低了。任务队列通常用来处理比较琐碎的任务吗?我主要关心的是如果任务队列中的任务失败会发生什么,因为它是异步完成的,我该如何通知用户?

任务将自动重试。如果失败是由基础架构引起的,则任务将在后续尝试中完成。所以你只需要担心失败是由你的代码(代码错误)或数据(验证错误)引起的情况。如果你解决了错误,你可以毫不犹豫地使用任务,不用担心通知。

在任何一种情况下,如果处理订单需要几秒钟,我可能不会为任务队列而烦恼。从用户体验的角度来看,用户希望感觉到应用程序对他们的订单做了一些工作,因此响应延迟 1-2 秒是可以接受的,甚至是意料之中的。

我们已经实施了一个庞大的物流流程应用程序,我们的一些流程需要 2-3 分钟才能从 BigQuery 读取大量数据、完成工作并发送带有附件的电子邮件。

要通知用户,您可以使用频道 API and/or 发送电子邮件。 您必须在任务参数中提供用户 ID、邮件地址或类似内容,因为它是系统 运行。 您不能向 App Engine 询问当前登录的用户,它每次都会为空。

就像安德烈说的:

you need to worry only about cases where a failure was caused by your code (code bug) or data (validation bug).

不要让异常从任务中消失,否则整个任务将再次 运行。