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

Java 使用GAE任务队列处理持久性操作,java,google-app-engine,jakarta-ee,task-queue,Java,Google App Engine,Jakarta Ee,Task Queue,希望了解将持久性操作交给任务队列是否是一个好主意。例如,用户提交一个新的“订单”,我使用bean验证来验证一切是否正常,然后将订单的处理/持久化交给任务队列,并更快地响应用户 我犹豫不决的是,持久性“可能”会失败,但一旦我验证了bean,成功的机会就很低了。任务队列通常用于处理相对琐碎的任务吗?我主要关心的是如果任务队列中的任务失败了会发生什么,因为它是异步完成的,我如何通知用户?任务将自动重试。如果故障是由基础结构引起的,则该任务将在后续尝试中完成。因此,您只需要担心由代码(代码错误)或数据(

希望了解将持久性操作交给任务队列是否是一个好主意。例如,用户提交一个新的“订单”,我使用bean验证来验证一切是否正常,然后将订单的处理/持久化交给任务队列,并更快地响应用户


我犹豫不决的是,持久性“可能”会失败,但一旦我验证了bean,成功的机会就很低了。任务队列通常用于处理相对琐碎的任务吗?我主要关心的是如果任务队列中的任务失败了会发生什么,因为它是异步完成的,我如何通知用户?

任务将自动重试。如果故障是由基础结构引起的,则该任务将在后续尝试中完成。因此,您只需要担心由代码(代码错误)或数据(验证错误)导致的故障。如果您解决了这些bug,就可以毫不犹豫地使用任务,并且不必担心通知


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

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

要通知用户,您可以使用Channel API和/或发送电子邮件。 您必须在任务参数中提供用户id、邮件地址或类似信息,因为它是由系统运行的。 你不能要求应用引擎为当前登录的用户添加应用程序,它每次都将为空

就像安德烈说的:

您只需要担心由于您的错误而导致失败的情况 代码(代码错误)或数据(验证错误)

不要让异常退出任务,否则整个任务将再次运行