希望了解将持久性操作移交给任务队列是否是个好主意。例如,用户提交新的订单,我使用bean验证来验证一切正常,然后将订单的处理/持久性移交给任务队列,并回复给用户快点。
我的犹豫是坚持不懈可以'失败了,但是一旦我验证了豆子,机会很低。任务队列通常用于处理相对微不足道的任务吗?我主要担心的是如果任务队列失败的任务会发生什么,因为它是异步完成的,我该如何通知用户?
答案 0 :(得分:1)
任务将自动重试。如果故障是由基础结构引起的,则该任务将在随后的尝试中完成。因此,您只需要担心代码(代码错误)或数据(验证错误)导致失败的情况。如果您解决了这些错误,您可以毫不犹豫地使用任务,并且不用担心通知。
在任何一种情况下,如果处理订单需要几秒钟,我可能不会为任务队列烦恼。从用户体验的角度来看,用户希望感觉应用程序对他们的订单做了一些工作,因此响应延迟1-2秒是可以接受的,甚至可以预期。
答案 1 :(得分:0)
我们已经实施了一个庞大的物流流程应用程序,我们的一些流程需要2-3分钟才能从BigQuery读取大量数据,完成工作并发送带附件的电子邮件。
要通知用户,您可以使用Channel API和/或发送电子邮件。 您必须在任务参数中提供用户ID,邮件地址或类似内容,因为它由系统运行。 你不能向App Engine询问当前登录的用户,它每次都会为空。
像安德烈说的那样:你只需要担心你的失败是由你造成的 代码(代码错误)或数据(验证错误)。
不要让异常退出任务,否则整个任务将再次运行。