如何在GAE的任务引擎中为任务设置ETA?

时间:2013-06-05 20:37:17

标签: java google-app-engine

我正在尝试将来一个小时的任务。这就是我正在做的事情,似乎没有用。

import static com.google.appengine.api.taskqueue.TaskOptions.Builder.*;


Calendar cal = Calendar.getInstance(); 
cal.setTime(new Date()); 
cal.add(Calendar.HOUR, 1); 
cal.getTime(); 

Queue queue = QueueFactory.getDefaultQueue();
queue.add(withUrl("/task/doMyThing").param("userId", userId).header("X-AppEngine-TaskETA", cal.getTime().getTime()+""));

-edit

好的,然后再说一点:当有人点击我的服务时,我想在他们点击服务后一小时就调用Java方法。我认为任务队列是在App Engine上执行此操作的最佳方式。我认为除非ETA通过,否则队列不会执行该任务。如果我以错误的方式接近这个并且有更好的方法来完成它,请告诉我。

- 再次编辑

感谢您的回答,这里的记录是我所做的:

Queue queue = QueueFactory.getDefaultQueue();
queue.add(withUrl("/task/sendReminder").param("userId", userId).countdownMillis(120000));

3 个答案:

答案 0 :(得分:3)

我已经完成了你想要做的事情但是在python中。我认为你试图设置的标题是一个appengine在从队列中启动任务时设置的标题,而不一定是你在创建任务时设置的标题。我认为您正在寻找价值为3600000的countdownMillis

答案 1 :(得分:0)

java Timer Class是要调查的人。
如果你想在一小时后执行任务,但正如你所提到的那样“未来一小时的任务”似乎不清楚

答案 2 :(得分:0)

我会看一下DelayQueue。我有一个线程从DelayQueue持续拉出对象并将它们移交给缓存的线程池以尽快执行它们,而不是使用Timer

DelayQueue将阻止,直到下一个项目的等待期已过。您可以通过在将队列添加到队列之前设置延迟时间来控制何时可以从队列中删除对象,以确保它们在预定的时间内保留在队列中。

使用缓存的线程池将确保每个任务在从队列中下载后立即执行,并通过重新使用线程来最小化初始化时间/空间,而不是在每次从队列中取出任务时初始化新任务。 / p>