Java 如何使Google Appengine任务可重复?
这是家庭作业。通常我会使用cron做类似的事情,但老师希望我们创建一个任务队列,定期轮询服务器以获取信息 到目前为止,我有这样的想法:Java 如何使Google Appengine任务可重复?,java,google-app-engine,Java,Google App Engine,这是家庭作业。通常我会使用cron做类似的事情,但老师希望我们创建一个任务队列,定期轮询服务器以获取信息 到目前为止,我有这样的想法: Queue queue = QueueFactory.getDefaultQueue(); queue.add( withUrl("/MyPage"). method(Method.GET). param("user", viewModel.getUserId())); 但这只运行一次。我怎样才能让它无限期地重复呢?你可以用不太优雅的方
Queue queue = QueueFactory.getDefaultQueue();
queue.add(
withUrl("/MyPage").
method(Method.GET).
param("user", viewModel.getUserId()));
但这只运行一次。我怎样才能让它无限期地重复呢?你可以用不太优雅的方式来做。如果您的任务因RuntimeException失败,它将自动重新启动。您可以使用配置来管理您希望它重复的频率。查看详细信息。不要使用默认队列,这一点很重要,因为您需要额外的参数
这不是安排任务的自然方式,但它对您很有效。您可以让任务中运行的代码向队列中添加另一个任务可以使用延迟任务重新启动任务本身 完成任务时调用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));
}
@Gwyn Howell我特别说过我没有使用cron。我在问如何重复排队。抱歉。你看到图书馆了吗?我快速看了一眼。这似乎是任务队列的更高抽象,对吗?嗯,所以没有让任务重复的非黑客方法?这不是黑客方法。但这不是一次正常的重启。如果您将使用DefferedTask抛出异常,这将很容易,但您可以为“/MyPage”返回除200以外的HTTP代码。我想我们对hacky的定义不一样;)当所有事情都成功完成时抛出异常对我来说似乎不是一个好的做法。好主意,我认为这是一个好办法。谢谢