_)mこんにちわ!マツウラです。前回のPushキューに引き続き、今回はPullキューについてです。公式ドキュメントを参考に見てゆこうと思います。GoPullキューではタスクを実行するため独自のシステムを設計できます。タスクをAppEngineアプリのみならず、外部のシステムに実行させることもできます。タスクの実行者は指定した期間タスクを貸してもらい、その後処理を行い期間が過ぎる前にそれらを削除します。Pullキューの使用にはPushキューで自動化されているいくつかの機能をアプリで処理する必要があります。アプリケーションが処理量に基づきワーカー数をスケールする必要があります。アプリケーションがスケールされないと、処理するタスクがないときにリソースが無駄になります。逆に処理するタスクが非常に多いと待ち時間が長くなり危険です。アプリケーションが処理のあとで明示的にタスクを削除する必要があります。PushキューではAppEngineがタスクを削除してくれました。アプリケーションがPullキュータスクを削除しないと別のワーカーがタスクを再処理するかもしれません。そのため、タスクが冪等性を保証しないとリソースを浪費したりエラーが起こるリスクがあります。Pullキューはqueue.yamlでの設定が必要です。定義の詳細についてはPullキューの定義を参照してください。Pullキューの概要PullキューはAppEngineのタスク処理システムの外部でタスクを処理することを可能にします。実行者がAppEngineアプリの一部ならappengine/taskqueueからAPIを用いてタスクを操作することができます。プロセスは次のように動作します。APIのいずれかを介してタスクを借り受けます。AppEngineが実行者にタスクデータを送信します。実行者がタスクを処理します。タスクはリース期限が切れる前ならば、失敗しても再び借り受けできます。これはリトライとしてカウントされ、リトライ数の最大値を設定することができます。一度タスクが成功すると、実行者はそのタスクを削除しなければなりません。実行者は処理量に応じてインスタンスをスケーリングする責任があります。AppEngineでタスクをPullする作業を始める前にqueue.yamlを設定して下さい。Pullキューにタスクを追加するPullキューにタスクを追加するには、queue.yamlで定義したキュー名を使用してキューを取得し、PULLにMethodを設定します。次はpull-queueと名付けたPullキューにタスクをエンキューする例です。キューが供給可能になるより早くにタスクのリースを試みているかどうかポーリングループで検出する必要があります。この障害が起きると、taskqueue.Leaseからエラーが返されます。これらのエラーを処理し、taskqueue.Leaseを呼び出してからリトライの間隔を空け、後でもう一度やり直さなければなりません。この問題を回避するには、taskqueue.Leaseを呼ぶ際にはRPCの期限を長く設定するよう検討してください。リースリクエストがタスクの空リストを返した際もリトライの間隔を空ける必要があるので注意してください。一度Pullキューにタスクを追加すると、taskqueue.Leaseを用いて1つ以上のタスクをリース可能です。taskqueue.Lease経由で使用可能になるtaskqueue.Addを用いて、つい先ごろ追加されたタスクは、使用可能になるのに少し時間がかかるかもしれません。リースリクエストの際には、リースするタスク数と何秒間リースするのかを指定します(タスク数は最大で1000、期間は最大で1週間)。リース期間は最も遅いタスクが完了するまで十分な時間を保証する必要があります。これを解決するために、taskqueue.ModifyLeaseを用いてリース期間を延長することが可能です。タスクをリースすると他のワーカーが処理することは不可になり、リース期限まで利用不可のままです。個々のタスクをリースする場合、APIはキューの先頭からタスクを選択します。タスクが利用できない場合、空のリストが返されます。taskqueue.LeaseはPullキューでのみ動作します。そのためPushキューで追加されたタスクをリースしようとすると、AppEngineはエラーを返します。queue.yamlの定義を変更することでPushキューをPullキューに変更することができます。詳細についてはPullキューの定義を参照してください。次のサンプルコードはPullキューから1時間でタスクを100個リースしています。互換性のない変更が行われる可能性があるので注意してください。タスクのすべてが同じではありません。そこでタスクにタグを付け、リースするタスクをタグから選択することが可能です。タグはフィルタとして機能します。"")2回目のLeaseByTagではタグ名が省略されています。これはETAが最も古いタスクに付けられたタグと同名のタグが付いたタスクを100個までリースしています。一般的に、一度ワーカーがタスクを完了するとキューからタスクを削除する必要があります。ワーカーが処理を終えた後でキューにタスクが残っている場合は、ワーカーが失敗したかもしれません。この場合は別のワーカーによってタスクを処理する必要があります。taskqueue.Leaseなどで返されるタスクのリストを渡すことで行います。ここでタスク関連の処理を行う。"pull-queue")これでPullキューは終わりです。APIを使用することになります。APIを外部から使用するためのライブラリの一覧はこちらです。次回はTaskQueueのdelayパッケージについてです。(2)月別アーカイブリンクはてなブログブログをはじめる週刊はてなブログはてなブログPro参加グループプログラミングテクノロジーはてなブログをはじめよう!knightsoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。