Java 如何识别任务是否已经存在于GAE请求队列中?

Java 如何识别任务是否已经存在于GAE请求队列中?,java,google-app-engine,pull-queue,Java,Google App Engine,Pull Queue,在将任务添加到pull队列之前,我必须确认队列中是否已经存在相同的任务,如果存在,则应跳过将任务添加到队列中。添加名为的任务对我来说不起作用,因为它直到七天之后才会过期,甚至从队列中删除 我们可以使用列出任务。同样,我们可以在GAE模块中获得任务列表,还是有其他方法可以找到任务是否存在于Google App Engine模块的队列中 谢谢如果任务名称与应用程序的逻辑不兼容,您可以创建一个相应的db实体(空,只是一个键),作为任务在队列中的标志。您应该将它放在任务事务中的db中,并在任务完成时删除

在将任务添加到pull队列之前,我必须确认队列中是否已经存在相同的任务,如果存在,则应跳过将任务添加到队列中。添加名为的任务对我来说不起作用,因为它直到七天之后才会过期,甚至从队列中删除

我们可以使用列出任务。同样,我们可以在GAE模块中获得任务列表,还是有其他方法可以找到任务是否存在于Google App Engine模块的队列中


谢谢

如果任务名称与应用程序的逻辑不兼容,您可以创建一个相应的db实体(空,只是一个键),作为任务在队列中的标志。您应该将它放在任务事务中的db中,并在任务完成时删除

每个任务需要1次读操作和4次写操作(2次插入操作和2次删除操作),没有什么是免费的

作为替代,您可以考虑在业务实体中有一些计数器,这将是任务名称的一部分。

假设您有实体用户和属性TaskCounter

然后将任务添加为:


tasks.add(taskName=“taskName”+str(user.id)+str(user.TaskCounter))-这将确保每个实体只能有一个活动任务。当然,您需要在任务完成时更新属性。如果您在任务中更新实体,几乎不需要花费任何费用。

我不完全理解(您没有解释)您不能仅使用名称和REST API的原因…?您好,尼克,根据我的要求,类似通知这样的任务会出现一段时间(例如,5分钟)。因此,为了避免重复通知,需要在该持续时间内(即在5分钟内)以先到先得的方式发送通知。因此,独特的任务需要在该期限内运行。您能否更详细地解释一下您所说的
“添加名为的任务对我不起作用,因为它在队列中七天之后才会过期”
?另外,您所说的
是什么意思“我们可以获得GAE模块中的任务列表吗?或者是否有其他方法可以找到任务是否存在于Google App Engine模块中的队列中?“
?感谢Alexander的回答。以前我想用Memcache代替db,因为它也包含实体的过期时间。Memcache可以工作,但不能保证保持值。因此,不能保证不会多次插入任务。它应该在大部分时间都能工作,但您应该使您的任务独立(能够使用相同的参数运行多次,而不会破坏业务逻辑)。如果我的答案令人满意,你可以将其标记为已接受。