非同期でのコードの実行

Cloud Tasks REST API、RPC API、または Google Cloud クライアント ライブラリを使用して非同期コードを実行するタスクをキューに入れ、Java 11/17 App Engine 標準サービスを push ターゲットとして使用します。

この Java 11 の例では、次の 2 つのアプリケーションを使用しています。

  • tasks アプリは、タスクを作成してキューに追加するコマンドライン ツールとしてローカルで動作します。
  • tasks-handler Spring Boot アプリは、タスク リクエストを受信するエンドポイントとして機能することで、Cloud Tasks リクエストをワーカーとして処理します。これがデプロイするメインの App Engine アプリになります。

始める前に

サンプルアプリをデプロイするには:

  1. Java SE 11 Development Kit(JDK)をダウンロードしてインストールします。
  2. Cloud Tasks の環境設定を行います。
  3. アプリのビルド、デプロイ、管理を行う Maven をダウンロードしてインストールします。
  4. gcloud CLI を初期化し、前の手順で作成したプロジェクトを使用するように構成します。
  5. gcloud CLI app-engine-java コンポーネントをインストールします。

    gcloud components install app-engine-java
    

サンプルのセットアップ

サンプルをダウンロードしてインストールするには:

  1. ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    または、zip ファイルとしてサンプルをダウンロードして解凍します。

  2. tasks-handler アプリの最上位ディレクトリに移動します。

    cd java-docs-samples/appengine-java11/tasks-handler/

  3. App Engine に tasks-handler アプリをデプロイします。

    mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

    PROJECT_ID は実際の Cloud プロジェクトの ID に置き換えます。pom.xml ファイルですでにプロジェクト ID を指定している場合は、実行するコマンドに -Dapp.deploy.projectId プロパティを含める必要はありません。

キューの作成

キューを作成するには、Google Cloud CLI の gcloud queues コマンドを使用します。

  1. コマンドラインで次のように入力します。

    gcloud tasks queues create MY_QUEUE

  2. キューが初期化されるまで待ちます。キューの作成を確認するには、describe コマンドを使用します。

    gcloud tasks queues describe MY_QUEUE

    出力は次のようになります。

    name: projects/PROJECT_ID/locations/LOCATION_ID/queues/MY_QUEUE // Note these ids
    rateLimits:
      maxBurstSize: 100
      maxConcurrentDispatches: 1000
      maxDispatchesPerSecond: 500.0
    retryConfig:
      maxAttempts: 100
      maxBackoff: 3600s
      maxDoublings: 16
      minBackoff: 0.100s
    state: RUNNING

キューのタスクへの追加

ローカルでタスクを作成して設定済みのキューに追加し、そのタスクを非同期ワーカーに配信します。

  1. appengine-java11/tasks ディレクトリに移動して、アプリをコンパイルします。

    cd ../tasks
    mvn package

  2. マシン上で次の環境変数を設定します。サンプルアプリはこれらを使用して、キューにタスクを追加するリクエストを作成します。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID // The project ID you set up above
    export LOCATION_ID=LOCATION_ID // The region in which your queue is running
    export QUEUE_ID=MY_QUEUE // The queue you created above
    注: ロケーション ID を確認するには、次の gcloud コマンドを使用します。
    gcloud tasks locations list

  3. デプロイしたタスクハンドラ コントローラ上の /tasks/create エンドポイントをターゲットとするタスク(ペイロードは指定)を作成します。ペイロードは、ワーカーがタスクを処理するために必要とするリクエストの任意のデータです。この例では、サンプルにハードコーディングされているため、指定する必要はありません。

    mvn exec:java -Dexec.mainClass="com.example.task.CreateTask"
    
    タスクがワーカーに渡され、ワーカーがタスクを処理すると、ワーカーから 2xx の成功ステータス コードが Cloud Tasks サービスに返され、タスクはそのキューから自動的に削除されます。

  4. ワーカー サービスのログを表示して、タスクが受信されたことを確認します。

    gcloud app logs read

次のステップ

以上で Cloud Tasks キューへのタスクの追加が完了しました。Cloud Tasks の理解をさらに深めるには、次のページをご覧ください。