Arrienda tareas de extracción

Una vez que las tareas están en una lista de extracción, un trabajador puede arrendarlas. 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 usas las listas de extracción, tienes la responsabilidad de escalar los trabajadores según el volumen de procesamiento.

Cómo solicitar la asignación de tareas

Cuando las tareas están en la cola, un trabajador puede solicitar la asignación de una o más de esas tareas mediante el método leaseTasks(). Es posible que haya un breve retraso antes de que las tareas recién agregadas con add() estén disponibles a través de 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 una tarea mediante modifyTaskLease().

Cuando se asigna una tarea, esta no está disponible para que la procese otro trabajador, y no lo estará hasta que venza la tarea.

En el siguiente código de ejemplo se detalla la asignación de tareas de la lista pull-queue por una hora:

Java 8

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

Java 7

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

Cómo agrupar en lotes con etiquetas de tareas

No todas las tareas son iguales. Tu código puede "etiquetar" tareas y después elegir qué tareas solicitar según la etiqueta. La etiqueta actúa como un filtro.

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()));

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

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.

Cómo regular de los índices de sondeo

Los trabajadores que sondean la lista en busca de tareas para solicitar deben detectar si intentan solicitar las tareas más rápido de lo que la lista puede proporcionarlas. Si se produce este error, se pueden generar las excepciones siguientes de leaseTasks():


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

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.

Cómo supervisar tareas en GCP Console

Para ver información sobre todas las tareas y las listas en tu aplicación, realiza los siguientes pasos:

  1. Abre la página Listas de tareas en cola en GCP Console y selecciona la pestaña Listas de extracción en la barra de menú, que se encuentra en la parte superior de la página.

    Ir a la pestaña Listas de extracción

  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 lista 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 o una lista de tareas con deleteTask(). Debes saber el nombre de la tarea para poder borrarla. leaseTasks() muestra el Task object en el que encontrarás los nombres de las tareas.

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