Prácticas recomendadas para suscribirse a un tema de Pub/Sub

Al suscribirse, un cliente suscriptor recibe mensajes de un tema de Pub/Sub. A continuación, se indican algunas prácticas recomendadas para suscribirse a Pub/Sub.

En este documento se da por hecho que ya conoces el proceso de suscripción a un tema de Pub/Sub y de recepción de mensajes en tu cliente de suscriptor.

Si no has usado nunca Pub/Sub, consulta una de las guías de inicio rápido y descubre cómo ejecutar Pub/Sub con la consola, la CLI de Google Cloud o las bibliotecas de cliente.

Elegir la suscripción adecuada

Pub/Sub ofrece suscripciones estándar, como las suscripciones push y pull. Además de las suscripciones estándar, Pub/Sub también ofrece suscripciones de exportación que te permiten almacenar mensajes directamente en un recursoGoogle Cloud , sin necesidad de usar Dataflow como intermediario. Por ejemplo, las suscripciones de BigQuery almacenan mensajes en una tabla de BigQuery.

Las suscripciones push se recomiendan en los siguientes casos:

  • No puedes incluir ningún código en tu aplicación de suscriptor que importe la biblioteca de cliente como dependencia.

  • El cliente suscriptor no puede hacer ninguna solicitud saliente.

  • Quieres usar la misma instancia para procesar mensajes de diferentes temas y suscripciones en los que el cliente de suscriptor no conoce la lista de suscripciones.

En los casos generales, recomendamos usar la biblioteca de cliente de alto nivel. Si, en su lugar, usas la extracción unaria, no definas returnImmediately en true. Si lo define como true, el rendimiento de la extracción se verá afectado negativamente. El campo returnImmediately está obsoleto.

Procesar los mensajes antes de confirmarlos

De forma predeterminada, Pub/Sub descarta un mensaje de una suscripción después de que se haya confirmado. Si no procesas un mensaje antes de enviar una confirmación y el procesamiento falla, el servicio no vuelve a enviar el mensaje. La excepción se da cuando has configurado la retención de mensajes confirmados o la retención de temas y realizas una operación de búsqueda.

Si tienes suscriptores con una latencia alta, puede que tengas que definir valores personalizados para el control de flujo y la gestión de concesiones.

Configurar el control de flujo de suscriptores para picos de tráfico transitorios

El control de flujo del lado del suscriptor te permite evitar que los suscriptores se vean sobrecargados por picos de tráfico. Puede dar tiempo a los mecanismos de escalado automático para que respondan a un aumento de la carga o puede distribuir el procesamiento de la carga durante un periodo más largo. El primer método ahorra latencia, mientras que el segundo ahorra costes.

Para configurar el control de flujo, debes definir los valores adecuados para maximum outstanding messages y total outstanding message bytes. Los valores predeterminados de estas variables de control de flujo y los nombres de las variables pueden variar en las bibliotecas de cliente.

  • Número máximo de mensajes pendientes: define el número máximo de mensajes enviados al cliente para los que Pub/Sub no ha recibido confirmaciones o confirmaciones negativas.

  • Bytes totales de mensajes pendientes: define el tamaño total máximo de los mensajes enviados al cliente para los que Pub/Sub no ha recibido confirmaciones o confirmaciones negativas.

Si se supera el límite de una de estas opciones, el cliente suscriptor no extraerá más mensajes. Este comportamiento continúa hasta que se confirman o se rechazan los mensajes que ya se han extraído. De esta forma, puede compensar el rendimiento con el coste asociado a la ejecución de más suscriptores.

Gestionar entregas duplicadas

De forma predeterminada, Pub/Sub ofrece a los suscriptores la entrega de mensajes al menos una vez. Esto significa que los mensajes se pueden enviar varias veces, aunque se hayan confirmado. En las siguientes secciones se explica cómo abordar situaciones habituales de reenvío.

Reenvío constante de muchos mensajes

Si se repiten los casos en los que se vuelven a enviar muchos mensajes, significa que tus suscriptores están sobrecargados o que no confirman la recepción de los mensajes antes de que venza el plazo.

Si usas una suscripción de extracción, puede que tengas que definir valores personalizados para los valores de control de flujo o aumentar los periodos de extensión de la concesión mediante la gestión de concesiones.

Si usas suscripciones de inserción, puede que tengas que aumentar el ajuste de plazo de confirmación. También puedes seguir las prácticas recomendadas sobre cómo mantener una suscripción en buen estado.

Reenvío ocasional de mensajes

Cuando veas que los mensajes se vuelven a enviar antes de que haya pasado el plazo de confirmación o después de que se hayan confirmado en unos segundos, Pub/Sub se comporta como se espera. No deberías ver estos picos de reenvío con frecuencia, pero cuando se produzcan, es probable que se den en varios mensajes simultáneamente. Tu sistema debe estar diseñado para tolerar estos duplicados ocasionales.

Reenvío repetido de algunos mensajes

Si ves que se entregan varios mensajes un número reducido de veces, confirma primero que los estás acusando recibo. Si no es así, averigua por qué tu suscriptor no gestiona los mensajes correctamente. Puede que te interese configurar un tema de mensajes fallidos para evitar que se vuelvan a enviar. Si confirmas la recepción del mensaje, es posible que Pub/Sub siga funcionando correctamente. Aunque es muy raro, es posible que se entreguen varias veces un pequeño número de mensajes si hay interrupciones internas en la red o en el hardware. El servicio intenta corregirse automáticamente en estos casos, pero los remedios pueden tardar varios minutos en activarse.

Tu sistema debe tolerar los reenvíos. Puedes reducir la probabilidad de que esto ocurra si procesas y confirmas los mensajes lo antes posible.

Si tu aplicación no puede tolerar duplicados, puedes habilitar la entrega exactamente una vez. Recuerda que esta función solo está disponible para las suscripciones de extracción y que también provoca una latencia de publicación a suscripción mayor. Evalúa si la latencia más alta es aceptable para tu caso práctico antes de habilitar esta función.

Prácticas recomendadas para el envío de mensajes ordenados en la suscripción

Si usas el orden de los mensajes, asegúrate de que se cumplan los siguientes requisitos:

  • Elige entre suscripciones StreamingPull o Pull. En el caso de las suscripciones push, Pub/Sub solo admite un mensaje pendiente por clave de ordenación a la vez. Enviar solicitudes push paralelas en este caso sería similar a enviar varios lotes de mensajes con la misma clave de ordenación para extraer suscriptores simultáneamente. Por lo tanto, no se recomiendan las suscripciones push para temas en los que se publiquen varios mensajes con frecuencia con la misma clave de ordenación o en los que la latencia sea extremadamente importante.

  • Habilita la opción de pedir mensajes en la suscripción. Por parte del editor, si envías mensajes con una clave de ordenación y en la misma región, puedes configurar los suscriptores para que reciban esos mensajes en orden. En el lado del suscriptor, habilita la propiedad de ordenación de mensajes solo en las suscripciones en las que quieras recibir mensajes ordenados. En función del estado de la propiedad, cada suscripción asociada al tema puede determinar si necesita una entrega ordenada sin que esto afecte a las demás.

  • Confirma los mensajes en orden. Cuando se usa la entrega ordenada, las confirmaciones de los mensajes posteriores no se procesan hasta que se procesan las confirmaciones de los mensajes anteriores por clave de ordenación. Por ejemplo, si tienes los mensajes 1, 2 y 3 con la misma clave de ordenación y los recibes todos, pero solo confirmas el mensaje 3, el servicio no considerará que el mensaje 3 se ha confirmado hasta que también se confirmen los mensajes 1 y 2. Si nunca se reciben las confirmaciones de los mensajes 1 y 2, se vuelven a enviar los mensajes 1, 2 y 3.

Resumen de las prácticas recomendadas

En la siguiente tabla se resumen las prácticas recomendadas que se indican en este documento:

Tema Tarea
Elige un tipo de suscripción Elige el tipo de suscripción que mejor se adapte a las necesidades de tu empresa. Si tu suscripción lo permite, usa también la biblioteca de cliente de alto nivel.
Volver a reproducir un mensaje confirmado Procesar un mensaje antes de confirmarlo. También puedes configurar una operación de búsqueda para no perder los mensajes confirmados.
Control de flujo Configura el control de flujo en los ajustes de tus suscriptores para asegurarte de que no se sobrecarguen hasta que se active el escalado automático o pase un tiempo.
Ordenar mensajes Cuando uses la mensajería ordenada, elige StreamingPull o Pull, habilita el orden de los mensajes en la suscripción y confirma los mensajes en orden.

Siguientes pasos