App Engine SDK を使用してタスクキューを管理するアプリケーションでは、queue.xml
という構成ファイルを使用してこれらのキューを定義します。Java アプリケーションの場合、このファイルはアプリケーションの WEB-INF
ディレクトリに格納されます。queue.xml
を使用して push キューと pull キューの両方を構成できます。push キューの場合、デフォルトのキューがあるので、この構成ファイルは省略できます。pull キューは queue.xml
で明示的に構成する必要があります。
例
名前付きのキューを定義し、デフォルトの処理速度をオーバーライドする基本的な例を次に示します。
<queue-entries>
<queue>
<name>my-push-queue</name>
<rate>1/s</rate>
</queue>
</queue-entries>
タスクの試行回数を設定し、デフォルトの処理レートを変更する queue.xml
構成の複雑な例を以下に示します。
<queue-entries>
<queue>
<name>fooqueue</name>
<rate>1/s</rate>
<retry-parameters>
<task-retry-limit>7</task-retry-limit>
<task-age-limit>2d</task-age-limit>
</retry-parameters>
</queue>
<queue>
<name>barqueue</name>
<rate>1/s</rate>
<retry-parameters>
<min-backoff-seconds>10</min-backoff-seconds>
<max-backoff-seconds>200</max-backoff-seconds>
<max-doublings>0</max-doublings>
</retry-parameters>
</queue>
<queue>
<name>bazqueue</name>
<rate>1/s</rate>
<retry-parameters>
<min-backoff-seconds>10</min-backoff-seconds>
<max-backoff-seconds>200</max-backoff-seconds>
<max-doublings>3</max-doublings>
</retry-parameters>
</queue>
</queue-entries>
構文
queue.xml
ファイルは、ルート要素が <queue-entries>
の XML ファイルです。このディレクティブには、<queue>
要素で指定された名目つきのキューが 0 個以上含まれます。キューの定義では、次のような要素を指定できます。
要素 | 説明 |
---|---|
<bucket-size> (push キュー) |
省略可。タスクキューでは、トークン バケット アルゴリズムを使用して、タスクの実行レートが制御されます。名前付きの各キューには、bucket_size 値で指定されている最大個数以内のトークンを保持するトークン バケットがあります。アプリケーションで 1 つのタスクが実行されるごとに、バケットからトークンが 1 つ削除されます。キューのバケットにトークンがなくなるまで、そのキュー内のタスクの処理を続けます。キューに対してユーザーが指定したレートに基づいて、App Engine はバケットに新しいトークンを補充し続けます。 キューに数多くのタスクがあり、レートが高い場合は、バケットサイズによってキューの処理レートが制限されます。バケットサイズの最大値は 500 です。これにより、タスクがキューに投入されるとすぐに処理が開始されるようにレートを高くすると同時に、数多くのタスクが短時間にキューに投入された場合のリソース使用量を制限できます。 キューの bucket_size を指定していない場合、デフォルト値は 5 です。多くの場合、デフォルトのサイズでは小さすぎるため、より大きい値を設定することをおすすめします。推奨サイズは処理レートを 5 で割った値(レート ÷ 5)です。 この要素の詳細については、 |
<max-concurrent-requests> (push キュー) |
省略可。指定されたキューから同時に実行できるタスクの最大数を設定します。この値は整数です。デフォルトでは、キューごとに実行できるタスクが 1,000 個までです。推奨される上限は、キューごとに実行できるタスクが 5,000 個までです。キューは、最初に作成されたときや、しばらくアイドル状態だったときは、ゆっくりと増加することに注意してください。 現在のタスクの数を制限すると、キューの実行レートをより詳細に制御して、同時に実行されるタスクの数が多くなりすぎないようにすることができます。また、Datastore での競合を防止し、他のキューやオンライン処理でリソースを使用できるようになります。 この要素の詳細については、Cloud Tasks API リファレンスで |
<mode> |
省略可。キューモードを指定します。この設定のデフォルト値は |
<name> |
必須。キューの名前です。これは キュー名には大文字、小文字、数字、ハイフンを使用できます。キュー名の最大長は 100 文字です。
どのアプリケーションにも default という名の push キューがあります。このキューには、1 秒あたり 5 タスクというレートがあらかじめ設定されていますが、 |
<rate> (push キュー) |
必須。このキューでタスクを処理する頻度です。値は数値の後にスラッシュと時間の単位を付けたものです。単位は、
数値が この要素の詳細については、Cloud Tasks API リファレンスで |
<retry-parameters> |
省略可。push キューで失敗したタスクの再試行回数を構成します。この要素を追加して、特定のキューで失敗するタスクの最大再試行回数を指定できます。再試行の制限時間を設定したり、再試行の間隔を制御したりすることもできます。 再試行パラメータに次のサブ要素を含めることができます。
|
<target> (push キュー) |
省略可。サービス / バージョン、フロントエンド バージョン、またはバックエンドの名前となる文字列です。このキューに追加されたすべてのタスクを実行するための名前です。デフォルト値は空の文字列です。
タスクの HTTP リクエストを構築するときは、アプリのドメイン名の前に文字列を付加します。たとえば、アプリ ID が ターゲットを指定しない場合は、タスクをキューに登録したのと同じバージョンのアプリケーションで呼び出されます。つまり、キューのターゲットを指定せずに、デフォルトのアプリケーション バージョンからタスクをキューに登録した場合、タスクはデフォルトのアプリケーション バージョンで呼び出されます。タスクをキューに追加してからタスクが実行されるまでの間にデフォルトのアプリケーション バージョンが変更された場合、タスクは新しいデフォルト バージョンで実行されることに注意してください。 サービスをディスパッチ ファイルと一緒に使用している場合、タスクの HTTP リクエストがインターセプトされて、別のサービスに再ルーティングされる可能性があります。 |
次の要素を <queue-entries>
ルート要素内で設定し、アプリ内のすべてのキューに指定できます。
要素 | 説明 |
---|---|
<total-storage-limit> |
省略可。タスクキュー ストレージ(100M)で利用可能な、デフォルトで割り当てられたストレージ制限をオーバーライドする文字列。例: <queue-entries> <total-storage-limit>1.2G</total-storage-limit> <queue> <name>fooqueue</name> </queue> </queue-entries> この割り当ては、アプリケーションの合計ストレージ容量(Datastore と Blobstore の容量を含む)の一部です。 接尾辞が指定されていない場合、指定する数値は、バイト単位であると解釈されます。次の接尾辞がサポートされています。
|
キュー構成ファイルのデプロイ
queue.xml
ファイルは、デフォルト サービスの WEB-INF
ディレクトリに配置する必要があります。
現在使用中のバージョンを変更せずにキュー構成ファイルをデプロイするには、次のコマンドを使用します。
appcfg.sh update_queues <application directory>
<application directory>
を、アプリケーションのメイン ディレクトリのパスに置き換えます。
キューを削除する
キューを削除するには、次の手順を行います。
queue.xml
ファイルからキューの定義を削除します。queue.xml
ファイルに対する変更をアップロードします。[PATH_TO_APP_ENGINE_SDK]\bin\appcfg.sh update_queues [YOUR_APP_DIR]
Windows の場合
[PATH_TO_APP_ENGINE_SDK]\bin\appcfg.cmd update_queues [YOUR_APP_DIR]
GCP Console で、キューを選択して [キューを削除] をクリックし、キューを削除します。
GCP Console からキューを削除した後に同じ名前で再び作成する場合は、7 日間待機する必要があります。