Suscripciones de extracción

En este documento, se proporciona una descripción general de una suscripción de extracción, su flujo de trabajo y las propiedades asociadas.

En una suscripción de extracción, un cliente suscriptor solicita mensajes del servidor de Pub/Sub.

El modo de extracción puede usar una de las dos APIs de servicio, Pull o StreamingPull. Para ejecutar la API elegida, puedes seleccionar una biblioteca cliente de alto nivel proporcionada por Google o una biblioteca cliente de bajo nivel generada automáticamente. También puedes elegir entre el procesamiento de mensajes síncrono y asíncrono.

Antes de comenzar

Antes de leer este documento, asegúrate de estar familiarizado con lo siguiente:

Flujo de trabajo de suscripción de extracción

En el caso de una suscripción de extracción, tu cliente suscriptor inicia solicitudes a un servidor de Pub/Sub para recuperar mensajes. El cliente suscriptor usa una de las siguientes APIs:

La mayoría de los clientes suscriptores no realizan estas solicitudes directamente. En su lugar, los clientes dependen de la biblioteca cliente de alto nivel proporcionada por Google Cloud, que realiza solicitudes de extracción de transmisión de forma interna y entrega mensajes de forma asíncrona. Para un cliente suscriptor que necesita un mayor control sobre cómo se extraen los mensajes, Pub/Sub usa una biblioteca de gRPC de bajo nivel y generada automáticamente. Esta biblioteca realiza solicitudes de extracción o solicitudes de extracción de transmisión directamente. Estas solicitudes pueden ser síncronas o asíncronas.

En las siguientes dos imágenes, se muestra el flujo de trabajo entre un cliente suscriptor y una suscripción de extracción.

Flujo de mensajes para una suscripción de extracción
Figura 1. Flujo de trabajo para una suscripción de extracción



Flujo de mensajes para una suscripción de StreamingPull
Figura 2: Flujo de trabajo para una suscripción de extracción de transmisión

Flujo de trabajo de extracción

El flujo de trabajo de extracción es el siguiente y hace referencia a la Figura 1:

  1. El cliente suscriptor llama explícitamente al método pull, que solicita mensajes para la entrega. Esta solicitud es el PullRequest, como se muestra en la imagen.
  2. El servidor de Pub/Sub responde con cero o más mensajes y IDs de confirmación de recepción. Una respuesta con cero mensajes o con un error no indica necesariamente que no hay mensajes disponibles para recibir. Esta respuesta es el PullResponse, como se muestra en la imagen.

  3. El cliente suscriptor llama explícitamente al método acknowledge. El cliente usa el ID de confirmación de recepción que se devolvió para confirmar que el mensaje se procesó y no es necesario volver a entregarlo.

En el caso de una sola solicitud de extracción de transmisión, un cliente suscriptor puede recibir varias respuestas debido a la conexión abierta. En cambio, solo se devuelve una respuesta por cada solicitud de extracción.

Propiedades de una suscripción de extracción

Las propiedades que configures para una suscripción de extracción determinarán cómo escribirás mensajes en tu suscripción. Para obtener más información, consulta propiedades de suscripción.

APIs de servicio de Pub/Sub

La suscripción de extracción de Pub/Sub puede usar una de las siguientes dos APIs para recuperar mensajes:

  • Extracción
  • StreamingPull

Usa RPCs unarias de Acknowledge y ModifyAckDeadline cuando recibas mensajes con estas APIs. Las dos APIs de Pub/Sub se describen en las siguientes secciones.

API de StreamingPull

Siempre que sea posible, las bibliotecas cliente de Pub/Sub usan StreamingPull para obtener la mayor capacidad de procesamiento y la latencia más baja. Aunque es posible que nunca uses directamente la API de StreamingPull, es importante saber cómo difiere de la API de Pull.

La API de StreamingPull depende de una conexión bidireccional persistente para recibir múltiples mensajes a medida que estén disponibles. El flujo de trabajo es el siguiente:

  1. El cliente envía una solicitud al servidor para establecer una conexión. Si se excede la cuota de conexión, el servidor devuelve un error de recurso agotado. La biblioteca cliente reintenta los errores de falta de cuota automáticamente.

  2. Si no hay ningún error o la cuota de conexión vuelve a estar disponible, el servidor envía mensajes de forma continua al cliente conectado.

  3. Si se supera la cuota de capacidad de procesamiento, el servidor deja de enviar mensajes. Sin embargo, la conexión no se interrumpe. El flujo se reanuda cuando vuelve a haber suficiente cuota de procesamiento disponible.

  4. El cliente o el servidor terminan la conexión.

La API de StreamingPull mantiene una conexión abierta. Los servidores de Pub/Sub cierran la conexión de forma recurrente después de un período para evitar una conexión persistente de larga duración. La biblioteca cliente vuelve a abrir automáticamente una conexión de StreamingPull.

Los mensajes se envían a la conexión cuando están disponibles. Por lo tanto, la API de StreamingPull minimiza la latencia y maximiza la capacidad de procesamiento de los mensajes.

Obtén más información sobre los métodos de RPC de StreamingPull: StreamingPullRequest y StreamingPullResponse.

API de Pull

Esta API es un RPC unario tradicional que se basa en un modelo de solicitud y respuesta. Una sola respuesta de extracción corresponde a una sola solicitud de extracción. El flujo de trabajo es el siguiente:

  1. El cliente envía una solicitud al servidor para enviar mensajes. Si se excede la cuota de procesamiento, el servidor devuelve un error de agotamiento de recursos.

  2. Si no hay errores o la cuota de procesamiento vuelve a estar disponible, el servidor responde con cero o más mensajes y IDs de confirmación.

Cuando se usa la API de Pull unaria, una respuesta con cero mensajes o con un error no indica necesariamente que no hay mensajes disponibles para recibir.

El uso de la API de Pull no garantiza una latencia baja ni una capacidad de procesamiento alta de mensajes. Para lograr una alta capacidad de procesamiento y una baja latencia con la API de Pull, debes tener varias solicitudes pendientes simultáneas. Las solicitudes nuevas se crean cuando las solicitudes anteriores reciben una respuesta. Arquitecturar una solución de este tipo es propenso a errores y difícil de mantener. Te recomendamos que utilices la API de StreamingPull para estos casos de uso.

Usa la API de Pull en lugar de la API de StreamingPull solo si necesitas un control estricto sobre lo siguiente:

  • Cantidad de mensajes que puede procesar el cliente suscriptor
  • La memoria y los recursos del cliente

También puedes usar esta API cuando tu suscriptor es un proxy entre Pub/Sub y otro servicio que opera de una manera más orientada a la extracción.

Obtén más información sobre los métodos Pull de la API de REST: Método: projects.subscriptions.pull.

Obtén más información sobre los métodos RPC de extracción: PullRequest y PullResponse.

Tipos de modos de procesamiento de mensajes

Elige uno de los siguientes modos de extracción para tus clientes suscriptores.

Modo de extracción asíncrona

El modo de extracción asíncrona separa la recepción de mensajes del procesamiento de mensajes en un cliente suscriptor. Este modo es el predeterminado para la mayoría de los clientes suscriptores. El modo de extracción asíncrono puede usar la API de StreamingPull o la API de Pull unaria. La extracción asíncrona también puede usar la biblioteca cliente de alto nivel o la biblioteca cliente de bajo nivel generada automáticamente.

Puedes obtener más información sobre las bibliotecas cliente más adelante en este documento.

Modo de extracción síncrona

En el modo de extracción síncrona, la recepción y el procesamiento de mensajes se producen en secuencia y no están desacoplados entre sí. Por lo tanto, de manera similar a las APIs de StreamingPull en comparación con las de Pull unarias, el procesamiento asíncrono ofrece una latencia más baja y una capacidad de procesamiento más alta que el procesamiento síncrono.

Usa el modo de extracción síncrono solo para aplicaciones en las que la baja latencia y la alta capacidad de procesamiento no son los factores más importantes en comparación con otros requisitos. Por ejemplo, una aplicación podría estar limitada a usar solo el modelo de programación síncrono. O bien, una aplicación con restricciones de recursos podría requerir un control más exacto sobre la memoria, la red o la CPU. En esos casos, usa el modo síncrono con la API de Pull unaria.

Bibliotecas cliente de Pub/Sub

Pub/Sub ofrece una biblioteca cliente autogenerada de alto y bajo nivel.

Biblioteca cliente de Pub/Sub de alto nivel

La biblioteca cliente de alto nivel proporciona opciones para controlar los plazos de confirmación a través de la administración de asignación de tiempo. Estas opciones son más detalladas que cuando configuras los plazos de confirmación con la consola o la CLI a nivel de la suscripción. La biblioteca cliente de alto nivel también implementa compatibilidad con funciones como la entrega ordenada, la entrega exactamente una vez y el control de flujo.

Te recomendamos que uses la extracción asíncrona y la API de StreamingPull con la biblioteca cliente de alto nivel. No todos los lenguajes compatibles conGoogle Cloud también admiten la API de Pull en la biblioteca cliente de alto nivel.

Para usar las bibliotecas cliente de alto nivel, consulta Bibliotecas cliente de Pub/Sub.

Biblioteca cliente de Pub/Sub de bajo nivel generada automáticamente

Hay disponible una biblioteca cliente de bajo nivel para los casos en los que debes usar la API de Pull directamente. Puedes usar el procesamiento síncrono o asíncrono con la biblioteca cliente de bajo nivel generada automáticamente. Cuando usas la biblioteca cliente de bajo nivel generada automáticamente, debes codificar manualmente funciones como la entrega ordenada, la entrega exactamente una vez, el control de flujo y la administración de arrendamientos.

Puedes usar el modelo de procesamiento síncrono cuando usas la biblioteca cliente de bajo nivel generada automáticamente para todos los idiomas admitidos. Puedes usar la biblioteca cliente de bajo nivel generada automáticamente y la extracción síncrona en los casos en los que tiene sentido usar la API de extracción directamente. Por ejemplo, es posible que tengas lógica de aplicación existente que dependa de este modelo.

Para usar directamente las bibliotecas cliente de bajo nivel generadas automáticamente, consulta la descripción general de las APIs de Pub/Sub.

¿Qué sigue?