Task Queue Go API Overview - Google App Engine
パッケージのインポート
import "appengine/taskqueue"
タスクの作成
タスクは taskqueue.Task 型で表され、taskqueue.NewPOSTTask() 関数で作成できます。
タスクは、指定した URL に HTTP POST を送ることで実行されます。
ユーザからのアクセスと同様に handleFunc() 関数で処理を割り振ります。
url.Values 型で POST で引き渡すデータを指定できます。
また、 time.Duration 型で現在時刻からどれくらい後に実行するのかを指定できます。
ETA を使って実行時刻を直接指定することもできます。
実行時刻の指定がない場合、即時実行されます。
// POST で渡すデータ values := url.Values{} values.Set("interim_key", key) // 24時間後に実行 delay, err := time.ParseDuration("24h") Check(c, err) // タスクの作成("/cancel" に POST で送信) task := taskqueue.NewPOSTTask("/cancel", values) task.Delay = delay
キューにタスクを追加
GAE ではアプリごとに複数のタスクキューを持つことができます。それぞれのタスクキューで、タスクを実行するタイミングや、キューの容量などを設定できます。
今回は最初から準備されている default という名前のキューにタスクを入れます。
default キューは実行できるタスクが無いか 5 秒毎にチェック・実行されます。
オリジナルのキューを作成する場合は queue.yaml を作って設定してください。
Go Task Queue Configuration - Google App Engineタスクは taskqueue.Add 関数でキューに追加できます。
// task を default キューに追加する taskqueue.Add(c, task, "default")
これで24時間後に実行されるタスクを作成できました。
URL を管理者専用にする
このままではユーザが /cancel にアクセスできてしまうので管理者専用にします。
GAE + Go で管理者専用機能を作る - y.okano blogを参考に app.yaml で login: admin を指定しておきます。
開発サーバでタスクを手動実行する
ローカルの開発サーバでは、デバッグ用に手動でタスクを実行するツールも付いています。これを使わなくても自動実行はできますが、手動で実行したい場合は利用します。
http://localhost:8080/_ah/admin/queues
にアクセスすることでキューの状態や、タスクの実行が可能です。
0 件のコメント:
コメントを投稿