Google App Engine 推送任务 - 使用 DeferredTasks 而不是辅助角色服务警告



文档中有一个关于使用DeferredTask的警告,上面写着:

警告:虽然延迟任务 API 是一种方便的处理方式 序列化,你必须仔细控制序列化 传递给有效负载方法的对象的兼容性。小心控制 是必需的,因为未处理的对象保留在任务队列中, 即使在更新应用程序代码之后。基于过时的任务 当任务 使用应用程序的新版本进行解码。

我不明白这一点。"小心控制"是什么意思?有没有人举过如何写出一个糟糕DefeferredTask的例子?

Java 序列化遵循您需要注意的某些规则。默认情况下,对 Java 类的任何更改都会"中断"序列化;使用旧类序列化的对象不能使用新类反序列化。

如果在类中声明serialVersionUID(并且不更改值),则即使更改类,也允许反序列化。如果您习惯于序列化到 JSON 并从 JSON 中序列化字段并在类中添加/删除字段,它将执行您通常期望的操作。即,从类中删除的字段将忽略数据,添加的新字段将具有默认值。

有些人讨厌Java序列化,有些人喜欢它。它很有用,并且在使用任务队列时非常方便。如果你总是声明一个serialVersionUID你可能会没事的......当您尝试序列化数据时,大多数错误都会导致异常,并且您很快就会发现这些错误。

最新更新