Pull タスクをリースする

タスクが pull キューに入ると、ワーカーはそれらをリースできます。タスクが処理されたら、ワーカーはそのタスクを削除する必要があります。

始める前に

注意事項

  • このメソッドは、スタンダード環境のサービス内で実行されているワーカーにのみ適用されます。
  • pull キューを使用する場合は、処理量に基づいてワーカーの規模を調整する必要があります。

タスクをリースする

タスクがキューに入った後、ワーカーは leaseTasks() メソッドを使用して、1 つまたは複数のタスクをリースできます。add() を使用して最近追加したタスクが leaseTasks() で利用可能になるまでに少し時間がかかることがあります。

リースをリクエストするときは、リースするタスクの数(最大 1,000 個)とリースの期間(秒単位で最大 1 週間)を指定します。最も時間のかかるタスクがリースの期限までに確実に終了するように、リースの期間は十分長くする必要があります。タスクのリースは modifyTaskLease() を使用して変更できます。

タスクをリースすると、そのタスクはリースの期限まで別のワーカーが処理できなくなります。

次のコードサンプルでは、キュー pull-queue からタスクを 1 時間リースします。

Java 8

List<TaskHandle> tasks = q.leaseTasks(3600, TimeUnit.SECONDS, numberOfTasksToLease);

Java 7

List<TaskHandle> tasks = q.leaseTasks(3600, TimeUnit.SECONDS, numberOfTasksToLease);

タスクタグによる一括処理

タスクはすべて同様とは限りません。コードでタスクにタグ付けし、リースするタスクをタグで選択できます。タグがフィルタの役割を果たします。

Java 8

q.add(
    TaskOptions.Builder.withMethod(TaskOptions.Method.PULL)
        .payload(content.toString())
        .tag("process".getBytes()));

Java 7

q.add(TaskOptions.Builder.withMethod(TaskOptions.Method.PULL)
    .payload(content.toString())
    .tag("process".getBytes()));

次に、フィルタされたタスクをリースします。

Java 8

// Lease only tasks tagged with "process"
List<TaskHandle> tasks =
    q.leaseTasksByTag(3600, TimeUnit.SECONDS, numberOfTasksToLease, "process");
// You can also specify a tag to lease via LeaseOptions passed to leaseTasks.

Java 7

// Lease only tasks tagged with "process"
List<TaskHandle> tasks = q
    .leaseTasksByTag(3600, TimeUnit.SECONDS, numberOfTasksToLease, "process");
// You can also specify a tag to lease via LeaseOptions passed to leaseTasks.

ポーリング レートの規制

タスクをリースするためにキューをポーリングするワーカーは、そのキューからタスクをリースするよりも早くリースできるかどうかを検出する必要があります。この障害が発生した場合に、leaseTasks() で次の例外が生成されることがあります。


これらの例外はコードでキャッチし、leaseTasks() 呼び出しをバックオフして後で再試行する必要があります。この問題を回避するには、leaseTasks() を呼び出すときに、リモート プロシージャ コールの期限を長く設定してみます。リース リクエストによってタスクの空のリストが返された場合も、バックオフする必要があります。

1 つのキューにつき 1 秒あたりに 10 個以上の LeaseTasks リクエストを生成した場合、最初の 10 個のリクエストのみ結果が返されます。リクエストがこの制限を超えている場合は、OK が返され、結果は返されません。

GCP Console でのタスクのモニタリング

アプリケーション内のすべてのタスクおよびキューに関する情報を表示するには、次の手順を実行します。

  1. GCP Console で [タスクキュー] ページを開き、ページの上部にあるメニューバーで [pull キュー] タブを選択します。

    [pull キュー] タブに移動する

  2. 目的のキューの名前をクリックして、キューの詳細ページを開きます。選択したキュー内のすべてのタスクが表示されます。

タスクを削除する

ワーカーはタスクを完了したら、そのタスクをキューから削除する必要があります。ワーカーが処理を終了した後にキューにタスクが残っている場合は、ワーカーが失敗したことが考えられます。その場合、そのタスクは別のワーカーによって処理されます。

タスクを削除する場合は deleteTask() を使用します。タスクは個々に削除することも、リストを削除することも可能です。タスクを削除するには、タスクの名前がわかっている必要があります。タスク名は、leaseTasks() によって返される Task object で確認できます。

次のコードサンプルでは、キューからタスクを削除する方法を示しています。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Java 8 の App Engine スタンダード環境