2017-05-03 7 views
0

私はユーザーにアクションを実行させたいと思っており、には次の24時間前にアクションを元に戻すオプションがありますそうでなければ、アクションが実行されます。私が思い付くことができる唯一の解決策は、Cron Jobを使用して、特定の時刻にスケジュールし、ジョブでスケジュールされた時間が経過したすべてのアクションを確認してから実行することです。しかし、その行動はあまり頻繁に起こるわけではないので、Cronの仕事を実行することは、私には良い解決策ではないように思われます。Google Appengine:1日に1回実行するタスクをスケジュールする方法

私がしたいことは、ユーザーがアクションをクリックするたびにジョブがスケジュールされ、そのアクションが実行されるとスケジュールがキャンセルされることです。 Cron Jobでこれを行うことは可能ですか? GAEが提供する代替手段がない場合は、

答えて

1

リクエストがcronジョブによってスケジュールされると、クォータ/請求の観点からリクエストが1つの通常リクエストとして処理されます。私はあなたのアプリケーションが1日あたりより多くのリクエストを受け取ったと思うので、あなたのアプリケーションがかなり重い場合を除き、1つのリクエストは問題ではありません。

私は、後者がより複雑であるため、遅延タスクよりもcronを好むでしょう。 cronジョブは、データストアを照会して何かを行う可能性が最も高いです。遅延タスクを追跡するよりも、データストアの状態を追跡または管理する方が簡単です。

1

次の2つのオプションがあります。

(1)(例えば)1時間に1回のcronジョブを実行します。作成時点から24時間以上経過したすべてのアクションを実行します。

(2)アクションが保存されている場合は、DeferredTask APIを使用してタスクを作成します。キャンセルする必要がある場合は、このタスクに名前(アクションのIDなど)を付けます。このタスクを24時間の遅延でキューに追加します。 Javaの例:

Queue queue = QueueFactory.getDefaultQueue(); 

    // Wait 24 hours to run 
    queue.add(TaskOptions.Builder.withPayload(new MyTask()) 
     .name(taskName).etaMillis(System.currentTimeMillis() + (24 * 60 * 60 * 1000));