美好的一天,

我正在将后端作为应用程序引擎(Java)运行。
使用端点,我收到请求。问题是,我需要计算一些很大的东西,但是前端需要快速的响应时间。因此,作为一种解决方案,我想预先计算一些内容,并将其存储在专用的内存缓存中。

我这样做的方法是添加一个静态块,然后在默认队列上运行一个延迟的任务。在启动时有更好的方法进行计算吗?

现在,此延迟的任务将执行大量的数据存储操作。有时,他们超时。因此,我创建了一个系统,该系统将在超时之前重试直到成功。但是,当我启动应用程序引擎时,它会立即创建两个延迟的任务。即使我设置DeferredTaskContext.setDoNotRetry(true);的事实,它也会在失败时继续重试任务。

老实说,推迟的任务感觉很挑剔。

我只想运行耗时超过5分钟的方法(随着数据集的增长,可能会更长)。我想在启动时运行此方法,然后定期运行。您将如何建模?我的第一个想法是做一份正式的工作,但时间有限。我需要执行延迟任务的Cron作业,希望他们不要以某种方式堆积或产生重复项或开始重试。

感谢您的帮助和美好的一天。

干ries

最佳答案

您的数据存储区操作永远都不应超时。您需要解决此问题-很可能是通过使用游标并为大型查询设置正确的批处理大小。
您可以执行initialization of objects on instance startup-检查对象是否可用,否则-计算。
由于Memcache易失,因此请记住将计算结果存储在数据存储区中(除了Memcache)。这样,如果由于任何原因删除了Memcache对象,您无需在第一次计算完成后几秒钟就重新计算所有内容。
可以安排延迟的任务在指定的延迟后执行。因此,您可以创建一个要在1小时后执行的任务,而不是使用cron作业。该任务完成自己的计算后,可以创建一个小时后要激发的另一个任务,依此类推。

07-28 02:45
查看更多