En esta página, se explica cómo migrar el código de la lista de extracción de la lista de tareas en cola a Pub/Sub. En este momento, se prefiere a Pub/Sub como opción para realizar el trabajo de la lista de extracción en App Engine.
Si la app usa listas de extracción y listas de aplicaciones en cola, usa esta guía para migrar las listas de extracción a Pub/Sub antes de migrar las listas de aplicaciones en cola al nuevo servicio de lista de aplicaciones en cola de Cloud Tasks. No se recomienda migrar las listas de extracción después de migrar las listas de aplicaciones en cola a Cloud Tasks, ya que es probable que el uso obligatorio del archivo queue.yaml
genere un comportamiento inesperado con Cloud Tasks.
Funciones no disponibles en Pub/Sub por el momento
Por el momento, las siguientes funciones de las listas de tareas en cola no están disponibles en Pub/Sub:
- Agrupación en lotes por etiqueta
- Anulación de duplicación automática
Precios y cuotas
Migrar las listas de extracción a Pub/Sub puede afectar el precio y las cuotas de la app.
Precios
Pub/Sub tiene sus propios precios. Al igual que con las listas de tareas en cola, enviar solicitudes a la app de App Engine con Pub/Sub puede generar costos.
Cuotas
Las cuotas de Pub/Sub son diferentes de las cuotas de las listas de tareas en cola. Al igual que sucede con las listas de tareas en cola, enviar solicitudes a la app de App Engine desde Pub/Sub puede afectar las cuotas de solicitudes de App Engine.
Antes de migrar
En esta sección, se analizan los temas que debes consultar antes de migrar las listas de extracción a Pub/Sub.
Habilita la API de Pub/Sub
Para habilitar la API de Pub/Sub, haz clic en Habilitar en la API de Pub/Sub dentro de la biblioteca de la API. Si ves el botón Administrar en lugar del botón Habilitar, ya habilitaste la API de Pub/Sub para el proyecto y no necesitas hacerlo de nuevo.
Autentica la app en la API de Pub/Sub
Debes autenticar la app en la API de Pub/Sub. En esta sección, se analiza la autenticación para dos casos de uso diferentes.
Para desarrollar o probar la app de forma local, te recomendamos usar una cuenta de servicio. Si deseas obtener instrucciones para configurar una cuenta de servicio y conectarla a la app, lee Obtén y proporciona las credenciales de cuenta de servicio de forma manual.
Para implementar la app en App Engine, no necesitas proporcionar ninguna autenticación nueva. Las credenciales predeterminadas de la aplicación (ADC) infieren los detalles de autenticación para las apps de App Engine.
Descarga Google Cloud CLI
Descarga y, luego, instala Google Cloud CLI para usar la CLI de gcloud con la API de Pub/Sub si no la instalaste antes. Ejecuta el siguiente comando desde la terminal si ya instalaste Google Cloud CLI.
gcloud components update
Importa la biblioteca cliente para Python
Sigue los pasos que se detallan a continuación a fin de usar la biblioteca cliente de Pub/Sub para Python con la app de App Engine:Crea un directorio para almacenar las bibliotecas de terceros, como
lib/
.mkdir lib
Copia las bibliotecas necesarias.
Te recomendamos usar un archivo de requisitos
pip
en lugar de instalar las bibliotecas una por una desde la línea de comandos. Crea un archivorequirements.txt
en la misma carpeta en la que está el archivoapp.yaml
si aún no tienes un archivorequirements.txt
. Agrega la siguiente línea:google-cloud-pubsub
Usa
pip
(versión 6 o posterior) con la marca-t <directory>
para copiar la biblioteca de Pub/Sub que especificaste en el archivorequirements.txt
en la carpeta que creaste en el paso anterior. Por ejemplo:pip install -t lib -r requirements.txt
Especifica la biblioteca de RPC en la sección
libraries
del archivoapp.yaml
:libraries: - name: grpcio version: 1.0.0
Usa el módulo
pkg_resources
a fin de asegurarte de que la app use la distribución correcta de la biblioteca cliente de Pub/Sub para Python.Crea un archivo
appengine_config.py
en la misma carpeta en la que está el archivoapp.yaml
si aún no tienes uno. Agrega lo siguiente al archivoappengine_config.py
:# appengine_config.py import pkg_resources from google.appengine.ext import vendor # Set path to your libraries folder. path = 'lib' # Add libraries installed in the path folder. vendor.add(path) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(path)
En el archivo
appengine_config.py
anterior, se supone que la carpetalib
se ubica en el directorio de trabajo actual. En algunos casos, como las pruebas de unidades, el directorio de trabajo actual puede ser diferente. Para evitar errores, puedes pasar de forma explícita la ruta completa a la carpetalib
con lo siguiente:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Importa la biblioteca cliente de Pub/Sub para Python en cualquier archivo que use listas de extracción desde la API de listas de tareas en cola:
from google.cloud import pubsub_v1
Pub/Sub y listas de extracción
Comparación de funciones
Pub/Sub envía el trabajo a los trabajadores a través de una relación entre el publicador y el suscriptor. Una suscripción de extracción en Pub/Sub es como una lista de extracción en las listas de tareas en cola porque el suscriptor extrae el mensaje del tema. En la siguiente tabla, se enumeran las características principales de las listas de extracción en las listas de tareas en cola y la característica asociada de las suscripciones de extracción en Pub/Sub.
Función de las listas de tareas en cola | Función de Pub/Sub |
---|---|
Cola de tareas | Tema |
Tarea | Mensaje |
Trabajador | Suscriptor |
Para obtener más información sobre la arquitectura de Pub/Sub, consulta Cloud Pub/Sub: Un servicio de mensajería a escala de Google.
Comparación del flujo de trabajo
A continuación, se muestra una comparación de un flujo de trabajo típico de una lista de extracción en las listas de tareas en cola y una suscripción de extracción en Pub/Sub.
Flujo de trabajo de listas de tareas en cola | Flujo de trabajo de Pub/Sub |
---|---|
Creas la lista de extracción | Creas el tema y suscribes al suscriptor (es decir, el trabajador) al tema |
Creas la tarea y la pones en cola | Creas el mensaje y lo publicas en el tema |
El trabajador asigna el tiempo de la tarea | El suscriptor extrae el mensaje del tema |
El trabajador procesa la tarea | El suscriptor procesa el mensaje |
El trabajador borra la tarea de la cola | El suscriptor confirmar recepción del mensaje |
La asignación de tiempo vence | El tema borra el mensaje una vez que todos los suscriptores confirmaron recepción del mensaje |
Crea suscripciones de extracción en Pub/Sub
Puedes usar una suscripción de extracción de Pub/Sub, como una lista de extracción de las listas de tareas en cola. Las suscripciones a un tema no vencen y pueden existir en forma simultánea para varios trabajadores. Esto significa que más de un trabajador puede procesar un mensaje, lo que conforma uno de los principales casos de uso de Pub/Sub. A fin de volver a crear las listas de extracción de las listas de tareas en cola como suscripciones de extracción de Pub/Sub, crea un tema para cada trabajador y suscríbete solo al trabajador asociado. Esto garantiza que exactamente un trabajador procese cada mensaje, como en las listas de tareas en cola. Si deseas obtener más información para crear y administrar suscripciones de extracción, lee sobre la administración de temas y suscripciones.
Borra las listas de extracción
Después de migrar las listas de extracción de las listas de tareas en cola a las suscripciones de extracción de Pub/Sub, bórralas de las listas de tareas en cola desde el archivo queue.yaml
. Recomendamos borrar cada lista de extracción antes de migrar la siguiente. Esto evita que la app duplique el trabajo que recibe de la nueva suscripción de extracción de Pub/Sub mientras migras las otras listas de extracción. Ten en cuenta que, si borras las listas de extracción de las listas de tareas en cola una por una en vez de hacerlo en una sola implementación, se puede generar un efecto mayor en la cuota de implementación de App Engine.
Una vez que hayas borrado todas las listas de extracción de las listas de tareas en cola, puedes omitir el archivo queue.yaml
en las implementaciones futuras de la app.
Si la app solo usa listas de extracción, quita cualquier referencia a la API de listas de tareas en cola en el código. Si la app usa listas de extracción y listas de aplicaciones en cola, puedes quitar las referencias a la API de listas de tareas en cola de los archivos que solo usan listas de extracción, o bien puedes esperar hasta que hayas migrado las listas de aplicaciones en cola y quitar las referencias a la API de listas de tareas en cola de todos los archivos.