Asignar tareas extraídas

Una vez que las tareas están en una cola de extracción, un trabajador puede alquilarlas. Una vez procesadas las tareas, el trabajador debe eliminarlas.

Antes de empezar

Contexto importante

  • Este método solo se aplica a los workers que se ejecutan en un servicio del entorno estándar.
  • Cuando usas colas de extracción, eres responsable de escalar tus trabajadores en función del volumen de procesamiento.

Asignar tareas

Una vez que las tareas estén en la cola, un trabajador podrá alquilar una o varias de ellas mediante el método taskqueue.Lease . Puede que haya un breve retraso antes de que las tareas añadidas recientemente con taskqueue.Add estén disponibles a través de taskqueue.Lease .

Cuando solicitas una asignación, especificas el número de tareas que quieres asignar (hasta un máximo de 1000 tareas) y la duración de la asignación en segundos (hasta un máximo de una semana). La duración de la concesión debe ser lo suficientemente larga como para que la tarea más lenta tenga tiempo de finalizar antes de que caduque el periodo de concesión. Puedes modificar una tarea de arrendamiento con taskqueue.ModifyLease .

Durante la asignación de una tarea, otro trabajador no puede procesarla. La tarea deja de estar disponible hasta que caduca la asignación.

En el siguiente ejemplo de código se alquilan 100 tareas de la cola pull-queue durante una hora:

tasks, err := taskqueue.Lease(ctx, 100, "pull-queue", 3600)

Agrupación por lotes con etiquetas de tarea

No todas las tareas son iguales. Tu código puede "etiquetar" tareas y, a continuación, elegir las tareas que quieres alquilar por etiqueta. La etiqueta actúa como filtro. En el siguiente código de ejemplo se muestra cómo etiquetar tareas y, a continuación, alquilarlas por etiquetas:

_, err = taskqueue.Add(ctx, &taskqueue.Task{
	Payload: []byte("parse"), Method: "PULL", Tag: "parse",
}, "pull-queue")
_, err = taskqueue.Add(ctx, &taskqueue.Task{
	Payload: []byte("render"), Method: "PULL", Tag: "render",
}, "pull-queue")

// leases render tasks, but not parse
tasks, err = taskqueue.LeaseByTag(ctx, 100, "pull-queue", 3600, "render")

// Leases up to 100 tasks that have same tag.
// Tag is that of "oldest" task by ETA.
tasks, err = taskqueue.LeaseByTag(ctx, 100, "pull-queue", 3600, "")

Regular las frecuencias de sondeo

Los trabajadores que consultan la cola para arrendar tareas deben detectar si están intentando arrendar tareas más rápido de lo que la cola puede proporcionárselas. Si se produce este error, taskqueue.Lease devolverá un error de retardo. Tu código debe gestionar estos errores, dejar de llamar a taskqueue.Lease y volver a intentarlo más tarde. Para evitar este problema, te recomendamos que definas un plazo de RPC más largo al llamar a taskqueue.Lease. También debes retroceder cuando una solicitud de arrendamiento devuelva una lista de tareas vacía. Si generas más de 10 solicitudes LeaseTasks por cola por segundo, solo las 10 primeras solicitudes devolverán resultados. Si las solicitudes superan este límite, se devuelve OK con cero resultados.

Monitorizar tareas en la consola de Google Cloud

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

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

    Ir a Cloud Tasks

  2. Haz clic en el nombre de la cola que te interese para abrir la página de detalles de la cola. Se muestran todas las tareas de la cola seleccionada.

Eliminar tareas

Una vez que un trabajador completa una tarea, debe eliminarla de la cola. Si ves que quedan tareas en una cola después de que un trabajador las haya procesado, es probable que el trabajador haya fallado. En ese caso, las tareas las procesará otro trabajador.

Puedes eliminar una lista de tareas, como la que devuelve taskqueue.Lease, pasándola a taskqueue.DeleteMulti:

tasks, err = taskqueue.Lease(ctx, 100, "pull-queue", 3600)
// Perform some work with the tasks here

taskqueue.DeleteMulti(ctx, tasks, "pull-queue")