合并在GAE(Java)推送队列上运行的任务的结果

时间:2014-02-12 06:35:19

标签: java google-app-engine task-queue

我想将任务放在我的GAE java应用程序中的推送队列中,以审核我的用户状态,每个任务1个用户。我正在努力找到一个很好的解决方案,以便在每个任务中以安全,有效的方式跟踪和整合审计结果。

目前我所做的是使用在其构造函数中有一个参数的延迟任务:表示我正在尝试审核的用户的实体的键的字符串表示。

我需要为每个用户保留的数据类型是/不是它们是活动的,是否与其他服务的连接被撤销/未被撤销等等。当我合并时,我想要做的就是加起来所有每个问题的是和否,所以例如我有1000个活跃用户,200个非活动用户等

我考虑的方法(请原谅天真......)是:

  • 每个任务都有自己的实体,然后我会检查这些实体以合并所有任务的结果
    • 优点:分布式环境中的线程安全且安全
    • 缺点:相对昂贵(即因为我必须写很多行,然后再删除它们),而且因为我必须对实体进行后处理以合并来自每行的数据
  • 我可以在每个延迟任务中获取一些单例类的实例,并使用它来保存和合并数据,然后使其在以后保留其数据
    • 优点:便宜(不必编写/删除额外数据),整洁因为单个对象完成所有工作,可以使线程安全
    • 缺点:在GAE上,我不能(轻松地)依赖单身实际上是单身因素,因为它是分布式的,所以在实践中我最终可能会将数据整合到两个或多个类似的“单身”对象中
  • 我怀疑我可以将数据写入一些预定义的上下文对象(servlet上下文?)或memcache?
    • 优点:便宜,快速,可能很简单?
    • 缺点:内存缓存数据可能被覆盖 - 它不安全;不确定servlet上下文

底线是所有这些是我的方法,我相信必须有一个标准的方法/模式来做这种类型的事情......但我一直无法找到它。

请给我任何建议......?谢谢!