1

这是一个家庭作业。通常我会使用 cron 来做这样的事情,但是老师希望我们创建一个任务队列,定期轮询服务器以获取信息。

到目前为止,我有这样的事情:

Queue queue = QueueFactory.getDefaultQueue();
queue.add(
    withUrl("/MyPage").
    method(Method.GET).
    param("user", viewModel.getUserId()));

但是这只运行一次。我怎样才能让它无限期地重复?

4

3 回答 3

2

您可以使任务中运行的代码将另一个任务添加到队列中

于 2012-10-06T20:33:21.897 回答
1

你可以用一种不太优雅的方式来做到这一点。如果您的任务因 RuntimeException 而失败,它将自动重新启动。您可以使用 config 来管理您希望它重复的频率。检查https://developers.google.com/appengine/docs/java/config/queue了解详情。重要的是不要使用默认队列,因为您将需要其他参数。

这不是安排任务的自然方式,但它会为您工作。

于 2012-10-06T19:54:46.853 回答
0

可以使用 DeferredTask 重新启动任务本身

完成任务时调用 deferSubmitTask()

private static class DeferredSubmitTask implements DeferredTask
{
    @Override
    public void run()
    {
        try
        {
            QueueFactory.getQueue("submitqueue").add(TaskOptions.Builder.withUrl("/tasks/submitworker").taskName("submit"));
        }
        catch (com.google.appengine.api.taskqueue.TaskAlreadyExistsException ex)
        {
            LOG.log(Level.INFO, "submit task launch failed, it is still running...");
        }
    }
}

public static void deferSubmitTask(long countdownMillis)
{
    QueueFactory.getDefaultQueue().add(TaskOptions.Builder.withPayload(new DeferredSubmitTask()).countdownMillis(countdownMillis));
}
于 2015-05-28T14:23:21.043 回答