Crea tareas

Esta página describe cómo crear tareas y colocarlas listas de aplicaciones en cola. Cuando desees procesar una tarea, debes crear un objeto de tarea nuevo y colocarlo en una cola. Puedes especificar explícitamente el servicio y el controlador que procesarán la tarea y, de manera opcional, transferir los datos específicos de la tarea al controlador. También puedes ajustar la configuración de la tarea, como programar una hora en el futuro en la que se debe ejecutar o limitar la cantidad de veces que deseas que se reintente la tarea si falla.

Crea una tarea nueva

Para crear una tarea y poner una tarea en cola, crea un objeto PushTask y llama a su método add(). Puedes agregarla a una cola especificada en queue.yaml si proporcionas un argumento de nombre de cola a add(). Como alternativa, puedes llamar a add() sin argumentos para agregar la tarea a la cola predeterminada.

Además, puedes agregar tareas a una cola de forma masiva con PushQueue. En el siguiente ejemplo, se agregan dos objetos PushTask a PushQueue mediante el método addTasks().

En el siguiente ejemplo de código, se muestra cómo agregar una tarea individual:

$task = new PushTask(
    '/worker',
    ['name' => 'john doe', 'action' => 'send_reminder']);
$task_name = $task->add();

En el siguiente ejemplo de código, se muestra cómo agregar varias tareas a la vez:

$task1 = new PushTask('/someUrl');
$task2 = new PushTask('/someOtherUrl');
$queue = new PushQueue();
$queue->addTasks([$task1, $task2]);

Cuando uses PushTask y PushQueue, incluye estas instrucciones en la parte superior del archivo PHP:

use google\appengine\api\taskqueue\PushTask;
use google\appengine\api\taskqueue\PushQueue;

Especifica el servicio de trabajador

Cuando una tarea se extrae de su cola, el servicio de lista de tareas en cola la envía a un servicio trabajador. Cada tarea tiene un destino y una URL, que son las que determinan qué servicio y controlador ejecutará la tarea en última instancia.

target

El destino especifica el servicio que recibirá la solicitud HTTP para realizar la tarea. Es una string que especifica un servicio, versión o instancia en cualquiera de los formularios canónicos. Los formatos más usados son los siguientes:

    service
    version.service
    instance.version.service

La string de destino se antepone al nombre de dominio de tu app. Existen tres formas de establecer el objetivo para una tarea:

  • Puedes declarar el destino cuando construyes la tarea. Configuras el destino de forma explícita durante la creación de la tarea mediante el parámetro de encabezado en el arreglo $options cuando construyes el objeto PushTask:

    $task = new PushTask(
        '/worker',
        [],
        ['header' => "Host: versionHostname"]);

  • Incluye una directiva target cuando definas una cola en queue.yaml, como en la definición de queue-blue. Todas las tareas agregadas a una cola con un target usarán ese destino, incluso si se asignó un destino diferente a la tarea durante el tiempo de construcción.

  • Si no se especifica ningún destino según los dos métodos descritos con anterioridad, el destino de la tarea será la versión del servicio que la pone en cola. Ten en cuenta que, si pones en cola una tarea del servicio y la versión predeterminados de esta manera, y la versión predeterminada cambia antes de que la tarea se ejecute, esta se ejecutará en la versión predeterminada nueva.

url

La url selecciona uno de los controladores en el servicio de destino, que realizará la tarea.

La url debe coincidir con uno de los patrones de URL del controlador en el servicio de destino. La url puede incluir parámetros de búsqueda si el método especificado en la tarea es GET o PULL. Si no se especifica la url, se usará la URL predeterminada /_ah/queue/[QUEUE_NAME], en la que [QUEUE_NAME] es el nombre de la cola de la tarea.

Pasa datos al controlador

Puedes pasar datos al controlador como parámetros de consulta en la URL de la tarea, pero solo si el método especificado en la tarea es GET o PULL.

El constructor PushTask tiene un argumento posicional para query_data. Los datos suelen ser un diccionario de pares clave-valor. Si el método de la tarea es POST o PUT, los datos se agregarán a la carga útil de la solicitud HTTP. Si el método es GET, se agregará a la URL como parámetros de consulta.

Nombra una tarea

Cuando creas una tarea nueva, App Engine le asigna un nombre único de forma predeterminada. Sin embargo, puedes asignarle tu propio nombre a una tarea mediante el parámetro name. Una de las ventajas de asignar tus propios nombres a las tareas es que se anula la duplicación de las tareas nombradas, lo que significa que puedes usar nombres de tareas para garantizar que una tarea se agregue solo una vez. La deduplicación se mantiene durante 9 días después de que se completa o se borra una tarea.

Ten en cuenta que la lógica de deduplicación ingresa una sobrecarga de rendimiento significativa, lo que se traduce en mayores latencias y mayor potencial de tasas de error asociadas con las tareas nombradas. Estos costos pueden aumentar significativamente si los nombres de las tareas son secuenciales, como con las marcas de tiempo. Por lo tanto, si asignas tus propios nombres, te recomendamos que utilices un prefijo bien distribuido para los nombres de tareas, como un hash de los contenidos.

Si asignas nombres personalizados a las tareas, ten en cuenta que la longitud máxima del nombre es de 500 caracteres y que el nombre puede contener letras mayúsculas y minúsculas, números, guiones bajos y guiones.

Pasos siguientes