En esta página, se describe cómo configurar colas de Cloud Tasks con el comando gcloud
de Google Cloud CLI.
Descripción general
Puedes configurar tu cola de Cloud Tasks cuando crees la cola o en cualquier momento posterior, y la configuración se aplicará a todas las tareas en esa cola.
La configuración de las colas tiene tres aspectos básicos:
Enrutamiento a nivel de la cola
La configuración del enrutamiento a nivel de la cola anula el enrutamiento establecido a nivel de la tarea. Esto es útil si quieres usar Cloud Tasks como un búfer frente de tu servicio de destino o si necesitas cambiar el enrutamiento de todas las tareas de una en la fila.
El enrutamiento a nivel de cola se aplica a lo siguiente:
- Tareas que están actualmente en la cola
- Tareas que se agregan a la cola después de configurar el enrutamiento a nivel de la cola
Limitaciones
El enrutamiento al nivel de la cola no es compatible con Cloud Key Management Service (Cloud KMS) claves de encriptación administradas por el cliente (CMEK). Si las CMEK están habilitadas, no podrás realizar las siguientes acciones:
- Crear tareas en una cola que tenga enrutamiento a nivel de la cola
- Aplicar enrutamiento a nivel de cola
Configura el enrutamiento a nivel de la cola para tareas HTTP
Aplicar enrutamiento a nivel de cola
Puedes configurar una cola para anular el enrutamiento a nivel de tarea cuando la creas
o cuando se actualiza la cola. Para configurar el enrutamiento a nivel de cola, establece la
de la fila
uriOverride
parámetro de configuración a tu ruta preferida. Si aplicas enrutamiento a nivel de cola como
actualizar a una cola existente, pausarla antes de aplicar los cambios
espera un minuto después de aplicar los cambios para reanudar la cola. Puede tardar
a un minuto para que se aplique la nueva configuración, por lo que se espera
ayuda a evitar que las tareas se despachen con la configuración anterior.
Actualizar o quitar el enrutamiento a nivel de cola
Pausa la fila.
Console
Para pausar la cola con la consola de Google Cloud, sigue estos pasos:
Abre la página de listas de tareas en cola de Cloud Tasks en Console.
Selecciona el nombre de la cola que deseas pausar y haz clic en Pausar la cola.
Confirma la acción.
gcloud
gcloud tasks queues pause QUEUE_ID
Reemplaza
QUEUE_ID
por el ID de la cola.Actualiza o quita el enrutamiento a nivel de cola.
Para actualizar el enrutamiento a nivel de cola, configura
uriOverride
parámetro a la ruta actualizada.Para quitar el enrutamiento al nivel de la cola con la API de REST o de RPC, sigue estos pasos:
API de REST: Envía un
patch
solicitud a la cola con una carga útil vacía y el parámetroupdateMask
Se define enhttpTarget
.API de RPC: Envía un
updateQueueRequest
para la cola con una carga útil vacía y el parámetroupdate_mask
configurado comohttp_target
En el siguiente ejemplo, se usa la API de REST para actualizar las tareas del host que se enrutan a:
curl -X PATCH -d @- -i \ -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID?updateMask=httpTarget.uriOverride" << EOF { "httpTarget": {"uriOverride":{"host":"NEW_HOST"}} } EOF
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto de Google Cloud. Para ello, ejecuta el siguiente comando en la terminal:gcloud config get-value project
LOCATION
: Es la ubicación de la fila.QUEUE_ID
: Es el ID de la fila.ACCESS_TOKEN
: Es tu token de acceso. Puedes obtener esto antes del ejecuta lo siguiente en la terminal:gcloud auth application-default login
gcloud auth application-default print-access-token
NEW_HOST
: Es el host nuevo que deseas que enrute la cola. a los que tiene acceso una cuenta.
Espera un minuto.
La nueva configuración puede tardar hasta un minuto en aplicarse, por lo que esperar para reanudar la cola ayuda a evitar que las tareas se despachen con la configuración anterior.
Reanuda la cola.
Console
Para reanudar la cola con la consola de Google Cloud, sigue estos pasos:
Abre la página de listas de tareas en cola de Cloud Tasks en Console.
Selecciona el nombre de la cola que deseas pausar y haz clic en Reanudar la cola.
Confirma la acción.
gcloud
gcloud tasks queues resume QUEUE_ID
Reemplaza
QUEUE_ID
por el ID de la cola.
Configura el enrutamiento a nivel de la cola para las tareas de App Engine
Si deseas configurar el enrutamiento al nivel de la cola para las tareas de App Engine, establece los parámetros
appEngineRoutingOverride
para tu servicio y versión preferidos de App Engine.
Para configurar este enrutamiento y anulación a nivel de cola no predeterminado
cualquier enrutamiento a nivel de tarea, puedes usar gcloud
:
gcloud tasks queues update QUEUE_ID\ --routing-override=service:SERVICE,version:VERSION
Reemplaza lo siguiente:
SERVICE
: Es el servicio trabajador de App Engine responsable de manejar las tareas.VERSION
: Es la versión de la app.
Por ejemplo, si configuras un servicio de trabajador SERVICE para controlar todas tareas en una cola, puedes enrutar a ese servicio y a la versión predeterminada:
gcloud tasks queues update QUEUE_ID \ --routing-override=service:SERVICE
Describe la cola:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Reemplaza lo siguiente:
QUEUE_ID
: El ID de la cola (su nombre corto)LOCATION
: Es la ubicación de la cola.
El resultado debería ser algo como lo siguiente:
appEngineRoutingOverride: host: SERVICE.PROJECT_ID.appspot.com service: SERVICE name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: 1000 maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Quita el enrutamiento a nivel de la cola para los destinos de App Engine
Cuando se quita el enrutamiento a nivel de cola, el enrutamiento a nivel de tarea se aplica tanto a las tareas actualmente en la cola y las tareas que se agreguen a la cola en el futuro. Quitar a nivel de cola, ejecuta el siguiente comando:
gcloud tasks queues update QUEUE_ID \ --clear-routing-override
Define límites de frecuencia
Puedes configurar valores máximos para la frecuencia y la cantidad de tareas simultáneas que puede enviar una cola.
gcloud tasks queues update QUEUE_ID \ --max-dispatches-per-second=DISPATCH_RATE \ --max-concurrent-dispatches=MAX_RUNNING
Reemplaza lo siguiente:
DISPATCH_RATE
: la frecuencia de envío (es decir, la frecuencia con la que se actualizan los tokens del bucket). En condiciones en las que hay un flujo relativamente constante de tareas, esta es equivalente a la velocidad a la que se despachan las tareas.MAX_RUNNING
: Es la cantidad máxima de tareas en la cola. que pueden ejecutarse a la vez.
Por ejemplo, si creaste una cola sin establecer ningún parámetro, puedes actualizar la cantidad máxima de tareas simultáneas llamando al siguiente comando:
gcloud tasks queues update QUEUE_ID \ --max-concurrent-dispatches=MAX_CONCURRENT_DISPATCHES
Describe
la cola:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Reemplaza lo siguiente:
QUEUE_ID
: El ID de la cola (su nombre corto)LOCATION
: Es la ubicación de la cola.
El resultado debería ser el siguiente:
name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID rateLimits: maxBurstSize: 100 maxConcurrentDispatches: MAX_CONCURRENT_DISPATCHES maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
Definición de frecuencias de procesamiento con los comandos gcloud
en comparación con el uso de queue.yaml
El enfoque de la API de Cloud Tasks para definir las tasas de procesamiento de colas difiere levemente del enfoque tomado con la carga de archivos queue.yaml
, a pesar de que ambos métodos generan colas con el mismo mecanismo subyacente.
En ambos casos, la cola usa el bucket de tokens. para controlar la velocidad de ejecución de las tareas. Cada cola nombrada tiene un bucket que contiene sus tokens.
Cada vez que la aplicación ejecuta una tarea, se quita un token del bucket.
La cola continúa procesando tareas hasta que se ejecute su bucket
sin tokens. El sistema vuelve a llenar el bucket con nuevos tokens de forma continua
en la tasa de max_dispatches_per_second
que especifiques para la cola Si el
la cola contiene tareas para procesar y el bucket de la cola contiene tokens,
el sistema procesa simultáneamente tantas tareas como tokens, hasta un
el valor de max_concurrent_dispatches
que estableciste
La carga desigual puede permitir que la cantidad de tokens en el bucket crezca de manera significativa, lo que puede generar picos de actividad de procesamiento cuando llega un pico de solicitudes. En este caso, tu cola puede experimentar una tasa de envío real que supere tu tasa de max_dispatches_per_second
, lo que consume recursos del sistema y compite con las solicitudes de servicio del usuario. En los casos en que usas colas para administrar las tasas de envío basadas en ANS relativamente lentas para servicios descendentes, esto puede generar errores como HTTP 429
(Demasiadas solicitudes) o 503
(Servicio no disponible).
Cuando usas cualquier método de la API de Cloud Tasks, tienes dos campos para definir la frecuencia de envío de las colas:
max_dispatches_per_second
max_concurrent_dispatches
Un tercer campo,
El sistema calcula max_burst_size
según el valor que estableciste para
max_dispatches_per_second
Cuando usas el método queue.yaml
, puedes configurar los tres elementos:
max_concurrent_requests
, que equivale amax_concurrent_dispatches
.rate
, que equivale amax_dispatches_per_second
.bucket_size
, que equivale amax_burst_size
.
En la mayoría de los casos, usar el método de la API de Cloud Tasks y dejar que el sistema configurado max_burst_size
produce una tasa muy eficiente para administrar los picos de solicitudes. Sin embargo, en algunos casos, sobre todo cuando se desea
es relativamente lenta, ya que se usa el método queue.yaml
para establecer
bucket_size
a un valor bajo o la configuración de max_concurrent_dispatches
como
un valor pequeño a través de la API de Cloud Tasks puede darte más control.
Configura los parámetros de reintento
Si una tarea no se completa correctamente, Cloud Tasks la reintenta con una retirada exponencial que depende de los parámetros que hayas configurado. Puedes especificar el máximo de veces que se debe reintentar una tarea con errores en la cola, y también puedes configurar un límite de tiempo para los reintentos y un intervalo de espera entre uno y otro.
gcloud tasks queues update QUEUE_ID \ --max-attempts=MAX_ATTEMPTS \ --min-backoff=MIN_INTERVAL \ --max-backoff=MAX_INTERVAL \ --max-doublings=MAX_DOUBLINGS \ --max-retry-duration=MAX_RETRY_DURATION
Reemplaza lo siguiente:
MAX_ATTEMPTS
: Es la cantidad máxima de intentos de una tarea, incluida la cantidad máxima de intentos. el primer intento. Para permitir una cantidad ilimitada de reintentos, configura la marca enunlimited
unlimited.MIN_INTERVAL
: Es la cantidad mínima de tiempo que debe esperarse entre dos intentos. El valor debe ser una string que termine en "s", como5s
.MAX_INTERVAL
: La cantidad máxima de tiempo que se debe esperar entre los reintentos. El valor debe ser una cadena que termine en "s", como, por ejemplo,5s
MAX_DOUBLINGS
: Es la cantidad máxima de veces que el elemento el intervalo entre reintentos de tareas con errores se duplicará antes del aumento se vuelve constante.MAX_RETRY_DURATION
: la cantidad máxima de tiempo para reintentar una tarea con errores medida desde el momento en que se intentó por primera vez El valor debe ser una cadena que termine en "s", como5s
.
Verifica que tu cola se haya configurado correctamente:
gcloud tasks queues describe QUEUE_ID --location=LOCATION
Reemplaza lo siguiente:
QUEUE_ID
: El ID de la cola (su nombre corto)LOCATION
: Es la ubicación de la cola.
¿Qué sigue?
- Obtén más información para crear tareas de destino HTTP.
- Obtén más información sobre cómo crear tareas de App Engine.
- Más información sobre cómo configurar Cloud Logging
- Obtén más información acerca de la administración de cuentas en la referencia de API de RPC.
- Obtén más información acerca de la administración de cuentas en la referencia de API de REST.
- Consulta la lista completa de comandos de
gcloud
de Cloud Tasks.