1

これは宿題用です。通常、私はcronを使用してこのようなことを行いますが、教師は、サーバーを定期的にポーリングして情報を取得するタスクキューを作成することを望んでいます。

これまでのところ、私はこのようなものを持っています:

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

ただし、これは1回だけ実行されます。どうすれば無期限に繰り返すことができますか?

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 に答える