En esta página se describe cómo crear un controlador de tareas, que es el código que gestiona las tareas de salida. Debes proporcionar un controlador de solicitudes para procesar la tarea. La asignación de la URL de la solicitud al controlador adecuado se declara en el archivo app.yaml
de tu servicio, al igual que cualquier otro controlador de solicitudes. Como controlas cómo asignar las solicitudes de tareas a un controlador, puedes organizar los controladores de tareas como quieras. Si tu aplicación procesa muchos tipos de tareas diferentes, puedes añadir todos los controladores a un solo servicio o distribuirlos entre varios servicios.
Escribir un controlador de solicitudes de tareas de inserción
En la cola, el servicio de colas de tareas crea un encabezado HTTP y lo envía a una instancia del servicio de trabajador especificado por el destino de la tarea. Las solicitudes de la cola de tareas se envían desde la dirección IP 0.1.0.2
.
No es necesario que el controlador esté escrito en el mismo idioma que creó y puso en cola la tarea si el controlador está en un servicio independiente.
Cuando escribas tu controlador, sigue estas directrices:
El código debe devolver un código de estado HTTP comprendido entre 200 y 299 para indicar que la operación se ha realizado correctamente. Cualquier otro código indica que la tarea ha fallado.
Las tareas push tienen un plazo de finalización fijo que depende del tipo de escalado del servicio que las ejecuta. Los servicios de escalado automático deben finalizar antes de que transcurran 10 minutos. Los servicios de escalado manual y básico pueden ejecutarse hasta 24 horas. Si tu controlador no cumple el plazo, el servicio de colas de tareas asumirá que la tarea ha fallado y volverá a intentarlo.
El controlador debe ser idempotente. La API Task Queue de App Engine se ha diseñado para proporcionar una entrega de "al menos una vez". Es decir, si una tarea se añade correctamente, App Engine la enviará a un controlador al menos una vez. Ten en cuenta que, en algunos casos excepcionales, es posible que se ejecuten varias tareas, por lo que tu código debe asegurarse de que no haya efectos secundarios perjudiciales si se ejecuta varias veces.
Task Queue usa el código HTTP de la respuesta del controlador para determinar si la tarea se ha completado correctamente. El servicio Task Queue es el único que ve la respuesta del controlador y solo para determinar si la tarea se ha completado correctamente. La cola ignora todos los demás campos de la respuesta. A continuación, el servicio descarta la respuesta. La aplicación de origen nunca recibe ninguno de los datos. Si una tarea falla, el servicio de colas de tareas vuelve a intentar ejecutarla enviando otra solicitud.
Los datos proporcionados por el usuario se pueden enviar al controlador en la solicitud como una cadena de consulta o como una carga útil en el cuerpo de la solicitud. En el artículo Crear tareas se explica cómo insertar datos de usuario. Si la solicitud incluye datos, el controlador debe saber cómo se insertaron en la solicitud. El código exacto que uses para obtener los datos de la solicitud dependerá del framework web concreto que estés usando.
Para probar un controlador de tareas, inicia sesión como administrador y visita la URL del controlador en tu navegador.
Lectura de encabezados de solicitud
Las solicitudes HTTP de las tareas de inserción tienen encabezados especiales definidos por App Engine, que contienen información específica de la tarea que puede usar tu controlador.
Si estos encabezados están presentes en una solicitud de un usuario externo a tu aplicación, se eliminan y se sustituyen. La única excepción son las solicitudes de administradores que hayan iniciado sesión en la aplicación, que pueden definir encabezados con fines de prueba. Por otro lado, los encabezados no se eliminan cuando tu aplicación se ejecuta en el servidor de desarrollo.
Las solicitudes de Task Queue siempre contendrán los siguientes encabezados:
Header | Descripción |
---|---|
X-Appengine-QueueName |
Nombre de la cola (posiblemente "default" para la cola de inserción predeterminada). |
X-Appengine-TaskName |
El nombre de la tarea o un ID único generado por el sistema si no se ha especificado ningún nombre. |
X-Appengine-TaskRetryCount |
El número de veces que se ha intentado la ejecución de esta tarea. En el primer intento, este valor es 0 . Este número incluye los intentos en los que la tarea ha fallado debido a la falta de instancias disponibles y nunca ha llegado a la fase de ejecución. |
X-Appengine-TaskExecutionCount |
Número de veces que esta tarea ha fallado anteriormente durante la fase de ejecución. Este número no incluye los errores debidos a la falta de instancias disponibles. |
X-Appengine-TaskETA |
Tiempo de ejecución objetivo de la tarea, especificado en segundos desde el 1 de enero de 1970. |
Si el controlador de solicitudes encuentra alguno de los encabezados indicados anteriormente, puede confiar en que la solicitud es una solicitud de cola de tareas.
Además, las solicitudes de Task Queue pueden contener los siguientes encabezados:
Header | Descripción |
---|---|
X-Appengine-TaskPreviousResponse |
El código de respuesta HTTP del último reintento. |
X-Appengine-TaskRetryReason |
El motivo por el que se vuelve a intentar realizar la tarea. |
X-Appengine-FailFast |
Indica que una tarea en ejecución falla inmediatamente si no hay ninguna instancia disponible. |
Proteger las URLs de los controladores de tareas
Si una tarea realiza operaciones sensibles (como modificar datos), puede que quieras proteger la URL del controlador para evitar que un usuario externo malintencionado la llame directamente. Puedes impedir que los usuarios accedan a las URLs de las tareas restringiendo el acceso a los administradores de App Engine. Las solicitudes de tareas las emite App Engine y siempre pueden dirigirse a una URL restringida.
Puedes restringir una URL añadiendo el elemento
login: admin
a la configuración del controlador en tu archivo app.yaml
.
Por ejemplo:
Siguientes pasos
- Consulta cómo eliminar tareas.