Usa la administración de colas o queue.yaml

En esta página, se explican las diferencias entre usar la API de Cloud Tasks para administrar colas y usar la carga de un archivo queue.yaml o queue.xml de Cloud Task para lograr los mismos fines. También se analizan algunos de los riesgos de mezclar los mecanismos y cómo solucionar los problemas más comunes.

Introducción

La API de Cloud Tasks ofrece una interfaz independiente de App Engine al servicio Task Queue de App Engine. Como parte de esa interfaz, proporciona la capacidad de administrar colas, incluso mediante la consola o el comando gcloud. Se puede acceder a las colas que crea la API de Cloud Tasks desde el SDK de App Engine y viceversa. A fin de mantener la compatibilidad, es posible usar el archivo de configuración que usa el SDK de App Engine, queue.yaml, para crear y configurar las colas que se usarán mediante la API de Cloud Tasks. Sin embargo, mezclar la configuración a través de un archivo con la configuración a través de la API de Cloud Tasks puede producir consecuencias inesperadas.

Riesgos de mezclar queue.yaml con los métodos de administración de colas de Cloud Tasks

Para el servicio subyacente, los archivos queue.yaml son definitivos. Si se sube un archivo queue.yaml que omite colas existentes en tu proyecto, sin importar cómo se crearon, esas colas quedan inhabilitadas o se detenidas. Por lo tanto, si usas la API de Cloud Tasks para llamar a CreateQueue o UpdateQueue y, luego, subes un archivo queue.yaml que los omite, las colas que se crearon en las llamadas de Cloud Tasks están inhabilitadas.

Considera la siguiente situación:

  1. Llama a CreateQueue para crear una cola llamada "cloud-tasks-queue".
  2. Crea un archivo queue.yaml con el siguiente contenido:

    queue:
    - name: queue-yaml-queue
    

¿Cuál es el estado actual de este proyecto? La cola llamada "cloud-tasks-queue" y cualquier otra cola que haya existido previamente quedan en estado DISABLED, y la cola llamada "queue-yaml-queue" está en estado RUNNING.

Este comportamiento puede resultar sorprendente si creas colas mediante la API de Cloud Tasks. En las siguientes instrucciones, se explica cómo reanudar una cola inhabilitada.

Del mismo modo, si una cola está inhabilitada en la API de Cloud Tasks, pero luego aparece en un archivo queue.yaml que se subió, esa cola se reanuda.

Si una cola se borra con el método DeleteQueue y, luego, aparece en un archivo queue.yaml, la carga de queue.yaml puede fallar porque los nombres de las colas no pueden reutilizarse durante varios días después de la eliminación.

Prácticas recomendadas

Si eres nuevo en Cloud Tasks o App Engine, usa la API de Cloud Tasks exclusivamente para administrar tus colas y evitar el uso de queue.yaml y queue.xml por completo. Los métodos de administración de colas de Cloud Tasks le dan al usuario más opciones en cuanto a la creación, actualización y eliminación de colas.

Sin embargo, si ya eres usuario de queue.yaml o queue.xml, solo debes considerar cambiar a métodos de administración de colas si comprendes los riesgos de mezclar queue.yaml con los métodos de administración de colas de Cloud Tasks.

A fin de aplicar el uso exclusivo de uno de los métodos de configuración, considera usar grupos y permisos para controlar el acceso a las actividades de administración de colas. Consulta Configuración de la cola segura para obtener instrucciones.

Depuración

Puedes inspeccionar los registros de auditoría de actividad del administrador para recuperar el historial de cambios de configuración de colas, que incluye las operaciones de creación, actualización y eliminación de colas.

    gcloud logging read \
      'protoPayload.methodName=
       (com.google.appengine.legacy.queue_created OR
        com.google.appengine.legacy.queue_updated OR
        google.cloud.tasks.v2.CloudTasks.CreateQueue OR
        google.cloud.tasks.v2.CloudTasks.UpdateQueue OR
        google.cloud.tasks.v2.CloudTasks.DeleteQueue)'

Por ejemplo, si una carga existente se inhabilita mediante una carga de queue.yaml, aparecerá el mensaje “En cola” ([QUEUE_NAME]) en el registro de auditoría a través del método com.google.appengine.legacy.queue_updated.

Cómo reanudar una cola inhabilitada con la carga de queue.yaml

Si mezclas queue.yaml con los métodos de administración de colas de Cloud Tasks, subir un archivo queue.yaml podría inhabilitar accidentalmente una cola creada a través de la API de Cloud Tasks.

Para reanudar la cola, puedes llamar a ResumeQueue en la cola o agregarla a queue.yaml y subir el archivo. Ten en cuenta que, si ya habías establecido un rate de procesamiento personalizado en la configuración de queue.yaml para la cola, ResumeQueue la restablece al rate predeterminado. Esto se refleja en el campo maxDispatchesPerSecond de la respuesta a ResumeQueue.

Cuotas

Si usas queue.yaml para crear tus colas de forma predeterminada, puedes crear un máximo de 100. Las colas creadas con la API de Cloud Tasks tienen un máximo predeterminado de 1,000. Al igual que en otros casos, la mezcla de los métodos de queue.yaml y la API de Cloud Tasks puede generar resultados inesperados. Por ejemplo, supongamos que creas algunas colas con queue.yaml y, luego, obtienes un aumento de la cuota de 2,000. Si, luego, usas el método de la API de Cloud Tasks para crear más colas, obtendrás errores de cuota. Para solucionar este problema, envía una solicitud mediante Editar cuotas desde la página Cuotas de Google Cloud Console.

Información adicional sobre los métodos de administración de colas de Cloud Tasks

Configuración y demora en el inicio de las colas

Cuando se cambia la configuración de las colas, es posible que la modificación tarde varios minutos en aplicarse. Por ejemplo, después de llamar a CreateQueue o UpdateQueue, pueden pasar varios minutos antes de que puedas llamar a CreateTask en esa cola de forma correcta.

Cloud Tasks y la cola default de App Engine

La cola de App Engine denominada "default" recibe un tratamiento especial en el SDK de App Engine y en la API de Cloud Tasks.

Si la cola default aún no existe, se creará en las siguientes situaciones:

  1. Cuando se agrega la primera tarea a la cola default mediante el SDK de App Engine.
  2. Cuando se sube un archivo queue.yaml que especifica una cola default.
  3. Cuando se llama a CreateQueue o UpdateQueue para crear la cola default

A fin de preservar la compatibilidad con App Engine, Cloud Tasks aplica las siguientes restricciones:

  1. Si se crea una cola llamada "default", debe ser una cola que use tareas de App Engine.
  2. Una vez creadas, los usuarios no pueden borrar la cola default.

En la API de Cloud Tasks, lo siguiente también se aplica a la cola default:

  1. La API de Cloud Tasks no crea de forma automática la cola default ni ninguna otra.
  2. Al igual que con cualquier otra cola, cuando se llama a GetQueue en la cola default, se produce un error no encontrado si se realiza la llamada antes de crear la cola.
  3. De manera similar, la cola default no aparece en el resultado de ListQueues antes de que se cree.
  4. La configuración de la cola default se puede cambiar con la llamada UpdateQueue.

¿Qué sigue?