每个用户的队列 - Appengine Java - 设计建议

时间:2014-02-10 03:15:42

标签: java google-app-engine queue

我正在为我们的项目使用AppEngine(Java)。

我们使用队列(在后端运行)来完成耗时的任务。但是,一些用户抱怨他们的任务没有立即运行,有时甚至需要一两个小时才能清除其他任务。

是否存在智能调度的可能性,其中用户拥有自己的队列而不是循环,队列是用户执行的?

有一个ETA标志(将来) - 我可以在同一个用户的队列中检查并放置一些重复的任务,但如果没有队列,任务就会被不必要地延迟。

感谢。

1 个答案:

答案 0 :(得分:1)

根据用户的大小,我可以想到以下几种方式: 如果用户大小很小(<10),则可以简单地为每个用户分配一个队列。 但通常,用户大小会大得多,在这种情况下,您可以设置一些代码来执行节流功能。 基本上,您定义一个允许每个用户的任务在给定的持续时间内执行的速率,例如每个用户只允许在10分钟内执行3个任务。当您从队列中获取第一个任务时,检查计数器(存储在db中)是否小于3,然后执行任务,同时将计数器加1。或者如果计数器已经大于3,将其扔回队列的末尾,或将其放入另一个优先级较低的队列(同样可以使用代码来控制)。 我相信还有其他方法,最好的解决方案将基于许多因素,例如你的任务规模,执行时间等。