Código de execução assíncrona

Coloque as tarefas em fila para execução de código assíncrono usando a API REST, a API RPC do Cloud Tasks ou a biblioteca de cliente do Google Cloud e use um serviço padrão do Java 11/17 do App Engine como destino de envio.

Este exemplo de Java 11 usa dois aplicativos:

  • O aplicativo tasks é executado localmente como uma ferramenta de linha de comando para criar e adicionar tarefas à fila.
  • O aplicativo Spring Boot tasks-handler processa solicitações do Cloud Tasks como um worker, servindo como um endpoint para receber solicitações de tarefas. Este é o aplicativo principal do Google App Engine que você implanta.

Antes de começar

Para implantar o aplicativo de amostra:

  1. Faça o download e instale o Kit de desenvolvimento do Java SE 11 (JDK, na sigla em inglês).
  2. Conclua as instruções de configuração do Cloud Tasks.
  3. Faça o download e instale o Maven para criar, implantar e gerenciar seu aplicativo.
  4. Inicialize a CLI gcloud e configure-a para usar o projeto criado acima.
  5. Instale o componente app-engine-java da CLI gcloud:

    gcloud components install app-engine-java
    

Configure a amostra

Para fazer o download e instalar a amostra:

  1. Clone o repositório de aplicativos de amostra na máquina local:

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    Também é possível fazer o download da amostra como um arquivo zip e extraí-lo.

  2. Navegue até o diretório de nível superior do aplicativo tasks-handler:

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

  3. Implante o aplicativo tasks-handler no App Engine:

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

    Substitua PROJECT_ID pelo ID do projeto do Cloud. Se o arquivo pom.xmlespecificar o ID do projeto, não será necessário incluir a propriedade -Dapp.deploy.projectId no comando executado.

Como criar uma fila

Use o comando gcloud queues da Google Cloud CLI para criar sua fila.

  1. Na linha de comando, digite o seguinte:

    gcloud tasks queues create MY_QUEUE

  2. Aguarde a inicialização da fila. Verifique a criação da fila usando o comando describe:

    gcloud tasks queues describe MY_QUEUE

    A saída será semelhante a esta:

    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

Como adicionar uma tarefa à fila

Depois de criar a tarefa localmente, ela deve ser adicionada à fila configurada e entregue a um worker assíncrono:

  1. Vá para o diretório appengine-java11/tasks e compile o aplicativo:

    cd ../tasks
    mvn package

  2. Defina as variáveis de ambiente a seguir em sua máquina. O aplicativo de amostra os usa para criar a solicitação que adiciona tarefas à fila:

    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
    Observação: o código do local pode ser encontrado usando o seguinte comando gcloud:
    gcloud tasks locations list

  3. Crie uma tarefa, segmentada no endpoint /tasks/create no controlador de manipulador de tarefas que você implantou, com um payload especificado. O payload pode ser qualquer dado da solicitação que o worker precise concluir o processamento da tarefa. Neste exemplo, ele está codificado na amostra e não precisa ser especificado:

    mvn exec:java -Dexec.mainClass="com.example.task.CreateTask"
    
    Quando a tarefa for passada para o worker e o worker processar a tarefa, o worker retornará um código de status de êxito 2xx para o serviço Cloud Tasks e excluirá a tarefa da fila automaticamente.

  4. Verifique se a tarefa foi recebida exibindo os registros do serviço do worker:

    gcloud app logs read

A seguir

Agora que você concluiu a adição de uma tarefa a uma fila do Cloud Tasks, continue explorando o Cloud Tasks consultando as seguintes páginas: