我想在未来一小时内完成一项任务。这就是我在做的,似乎不管用。
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()+""));
-编辑
好的,再澄清一下:当有人点击我的服务时,我想在他们点击服务一小时后调用一个java方法。我认为在appengine上,任务队列是最好的方法。我以为队列不会执行该任务,除非eta已经通过。如果我走错了路,有更好的方法来完成它,请告诉我。
-再次编辑
谢谢你的回答,记录如下:
Queue queue = QueueFactory.getDefaultQueue();
queue.add(withUrl("/task/sendReminder").param("userId", userId).countdownMillis(120000));
3条答案
按热度按时间ggazkfy81#
我已经做了你想做的,但在python中。我认为您试图设置的头是appengine在从队列启动任务时设置的头,而不一定是您在创建任务时设置的头。我想你在找一个值3600000的倒计时。
bcs8qyzn2#
我要看看排队的人。我会用一根线把物体从
DelayQueue
并将它们交给缓存线程池以尽快执行它们,而不是使用Timer
.DelayQueue
将阻止,直到下一个项目的等待期过期。您可以通过在将对象添加到队列之前设置它们的延迟时间来控制何时可以从队列中删除对象,以确保它们在队列中停留一段时间。使用缓存线程池可以确保每个任务一离开队列就被执行,并通过重用线程而不是每次任务离开队列就初始化新的线程来最小化初始化时间/空间。
py49o6xq3#
java定时器类就是要研究的对象。
如果你想在一小时后执行任务
“未来一小时的任务”似乎还不清楚