Ejecuta código en forma asíncrona

Pon en cola tareas para la ejecución de código asíncrono mediante la API de REST de Cloud Tasks, la API de RPC o la biblioteca cliente de Google Cloud, y usa un servicio estándar de App Engine de Java 11/17 como objetivo push.

En este ejemplo de Java 11, se usan dos aplicaciones:

  • La app tasks se ejecuta de forma local como una herramienta de línea de comandos para crear y agregar tareas a la cola.
  • La app de Spring Boot tasks-handler procesa las solicitudes de Cloud Tasks como trabajador, ya que funciona como un extremo para recibir solicitudes de tareas. Esta es la aplicación principal de App Engine que implementas.

Antes de comenzar

Para implementar la aplicación de muestra:

  1. Descarga e instala el kit de desarrollo de Java SE 11 (JDK).
  2. Completa las instrucciones de configuración de Cloud Tasks.
  3. Descarga e instala Maven para compilar, implementar y administrar tu app.
  4. Inicializa la CLI de gcloud y configúrala para usar el proyecto que creaste anteriormente.
  5. Instala el componente app-engine-java de la CLI de gcloud:

    gcloud components install app-engine-java
    

Configura la muestra

Para descargar y luego instalar la muestra, sigue estas instrucciones:

  1. Clona el repositorio de la aplicación de muestra en tu máquina local:

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.

  2. Navega al directorio de nivel superior de la app de tasks-handler:

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

  3. Implementa la app tasks-handler en App Engine:

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

    Reemplaza PROJECT_ID por el ID del proyecto de Cloud. Si tu archivo pom.xml ya especifica tu ID del proyecto, no necesitas incluir la propiedad -Dapp.deploy.projectId en el comando que ejecutas.

Crear una cola

Usa el comando gcloud queues de Google Cloud CLI para crear tu cola.

  1. En la línea de comandos, ingresa lo siguiente:

    gcloud tasks queues create MY_QUEUE

  2. Espera a que la cola se inicialice. Verifica la creación de tu cola con el comando describe:

    gcloud tasks queues describe MY_QUEUE

    El resultado debe ser similar a esto:

    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

Agrega una tarea a la cola

Crea una tarea localmente, agrégala a la cola que configuraste y entrégala a un trabajador asíncrono:

  1. Ve al directorio appengine-java11/tasks y compila la app:

    cd ../tasks
    mvn package

  2. Configura las siguientes variables de entorno en tu máquina. La app de muestra usa estos elementos para crear la solicitud que agrega tareas a tu cola:

    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
    Nota: Para encontrar el ID de ubicación, usa el siguiente comando gcloud:
    gcloud tasks locations list

  3. Crea una tarea, orientada al extremo /tasks/create en el controlador de tareas que implementaste, con una carga útil especificada. La carga útil puede ser cualquier dato de la solicitud que el trabajador necesita para completar el procesamiento de la tarea; en este ejemplo, está codificado en la muestra y no es necesario especificarlo:

    mvn exec:java -Dexec.mainClass="com.example.task.CreateTask"
    
    Una vez que la tarea se pasa al trabajador y este procesa la tarea, el trabajador mostrará un código de estado de éxito 2xx al servicio de Cloud Tasks y borrará la tarea de la cola automáticamente.

  4. Muestra los registros del servicio de trabajador para verificar que la tarea se haya recibido:

    gcloud app logs read

Qué sigue

Ahora que terminaste de agregar una tarea a una cola de Cloud Tasks, continúa explorando Cloud Tasks en las siguientes páginas: