Asignación de tiempo para tareas de extracción

Una vez que las tareas están en una lista de extracción, un trabajador puede asignarse tiempo para ellas. Después de procesar las tareas, el trabajador debe borrarlas.

Antes de comenzar

Contexto importante

  • Este método solo se aplica a trabajadores que se ejecutan dentro de un servicio del entorno estándar.
  • Cuando utilizas las listas de extracción, tienes la responsabilidad de escalar los trabajadores según el volumen de procesamiento.

Asignación de tiempo para tareas

Cuando las tareas se encuentran en la lista, se puede asignar tiempo a un trabajador para una o más de ellas con el método leaseTasks(). Puede llevar algo de tiempo que las tareas recién agregadas mediante add() estén disponibles con leaseTasks().

Cuando solicitas una asignación, debes especificar la cantidad de tareas (hasta un máximo de 1,000) y la duración en segundos (hasta un máximo de una semana). La asignación debe durar lo suficiente para garantizar que la tarea más lenta tenga tiempo de completarse antes de que venza el período de la asignación. Puedes modificar la asignación de tiempo de una tarea mediante modifyTaskLease().

Cuando se asigna tiempo para una tarea, esta deja de estar disponible para que la procese otro trabajador hasta que venza la asignación.

En el siguiente ejemplo de código, se realiza una asignación de tiempo de una hora para las tareas de la lista pull-queue.

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

Agrupación en lotes con etiquetas de tareas

No todas las tareas son iguales. Tu código puede “etiquetar” tareas y después elegir para qué tareas asignar tiempo según la etiqueta. La etiqueta actúa como filtro.

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

Luego, solicita la asignación de las tareas filtradas:

// 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.

Regula tasas de sondeo

Los trabajadores que sondeen la lista en busca de tareas para las que puedan asignarse tiempo deberían detectar si están intentando asignarse tiempo para tareas más rápido de lo que la lista puede proporcionarlas. Si se produce este error, se pueden generar las siguientes excepciones de leaseTasks():


El código debe detectar estas excepciones, dejar de llamar a leaseTasks() y volver a intentarlo en otro momento. Para evitar este problema, considera establecer un plazo mayor de RPC cuando llames a leaseTasks(). También debes retirarte cuando una solicitud de asignación de tiempo muestra una lista vacía de tareas.

Si generas más de 10 solicitudes LeaseTasks por lista por segundo, solo las primeras 10 solicitudes mostrarán resultados. Si las solicitudes superan este límite, se muestra OK sin resultados.

Supervisa tareas en la consola de Google Cloud

Para ver información sobre todas las tareas y las listas en tu aplicación, haz lo siguiente:

  1. Abre la página Cloud Tasks en la consola de Google Cloud y busca el valor Extraer en la columna Tipo.

    Ir a Cloud Tasks

  2. Haz clic en el nombre de la lista que te interesa y abre la página de detalles de la lista. Se muestran todas las tareas en la lista seleccionada.

Cómo borrar tareas

Una vez que un trabajador completa una tarea, debe borrarla de la lista. Si ves que las tareas permanecen en una cola después de que el trabajador termina de procesarlas, es probable que haya fallado; en ese caso, otro trabajador procesará las tareas.

Puedes borrar una tarea individual o una lista de tareas mediante deleteTask(). Debes saber el nombre de la tarea para poder borrarla. Puedes encontrar los nombres de las tareas en el Task object que muestra leaseTasks().

En el siguiente código de muestra, se detalla cómo borrar una tarea de una cola:

q.deleteTask(task);