En este documento, se supone que ya conoces el proceso de suscripción a un tema de Pub/Sub y la recepción de mensajes en tu cliente suscriptor.
Si no conoces Pub/Sub, consulta una de las guías de inicio rápido y aprende a ejecutar Pub/Sub con la consola, la CLI de Google Cloud o las bibliotecas cliente.
Elige la suscripción adecuada
Pub/Sub ofrece suscripciones estándar, como las suscripciones de envío y extracción. Además de las suscripciones estándar, Pub/Sub también ofrece suscripciones de exportación que te permiten almacenar mensajes directamente en un recurso deGoogle Cloud , sin necesidad de Dataflow como intermediario. Por ejemplo, las suscripciones a BigQuery almacenan mensajes en una tabla de BigQuery.
Se recomiendan las suscripciones push en los siguientes casos:
No puedes incluir ningún código en tu aplicación para suscriptores que importe la biblioteca cliente como dependencia.
El cliente suscriptor no puede realizar ninguna solicitud saliente.
Quieres usar la misma instancia para procesar mensajes de diferentes temas y suscripciones en los que el cliente suscriptor no conoce la lista de suscripciones.
Para los casos generales, recomendamos usar la biblioteca cliente de alto nivel. Si, en cambio, usas la extracción unaria, no configures returnImmediately
como true
. Si se establece en true
, se afecta negativamente el rendimiento de la extracción.
El campo returnImmediately
ahora está obsoleto.
Para comparar todos los tipos de suscripciones y elegir la que mejor se adapte a las necesidades de tu empresa, consulta la tabla comparativa de suscripciones de Pub/Sub.
Para obtener información sobre los beneficios de una suscripción a la exportación, consulta Cuándo usar una suscripción a la exportación.
Procesa los mensajes antes de confirmarlos
De forma predeterminada, Pub/Sub descarta un mensaje de una suscripción después de que se confirma su recepción. Si no procesas un mensaje antes de enviar una confirmación y el procesamiento falla, el servicio no volverá a entregar el mensaje. La excepción se da cuando configuraste la retención de mensajes confirmados o la retención de temas, y realizas una operación de búsqueda.
Si tienes suscriptores con latencia alta, es posible que debas establecer valores personalizados para el control de flujo y la administración de arrendamientos.
Configura el control de flujo del suscriptor para los aumentos transitorios del tráfico
El control de flujo del lado del suscriptor te permite evitar que los suscriptores se sobrecarguen por los picos de tráfico. Puede permitir que los mecanismos de ajuste de escala automático respondan a una mayor carga o puede distribuir el procesamiento de la carga durante un período más prolongado. El primer método ahorra latencia, mientras que el segundo ahorra costos.
Para configurar el control de flujo, debes establecer 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 diferir entre las bibliotecas cliente.
Cantidad máxima de mensajes pendientes define la cantidad máxima de mensajes entregados al cliente para los que Pub/Sub no recibió confirmaciones ni confirmaciones negativas.
La métrica Total outstanding message bytes define el tamaño total máximo de los mensajes entregados al cliente para los que Pub/Sub no recibió confirmaciones ni 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 rechazan los mensajes que ya se extrajeron. De esta manera, puedes compensar el rendimiento con el costo asociado a la ejecución de más suscriptores.
Cómo controlar las entregas duplicadas
De forma predeterminada, Pub/Sub proporciona la entrega de mensajes al menos una vez a los suscriptores. Esto significa que los mensajes se pueden entregar varias veces, incluso si se confirmó su recepción. En las siguientes secciones, se explica cómo abordar situaciones comunes de reenvío.
Reenvío coherente de muchos mensajes
Si experimentas casos en los que siempre se vuelven a entregar muchos mensajes, es posible que tus suscriptores estén sobrecargados o que no confirmen la recepción de los mensajes antes de que venza el plazo.
Si utilizas una suscripción de extracción, es posible que debas establecer valores personalizados para los valores de control de flujo o aumentar los períodos de extensión del arrendamiento con la administración de arrendamientos.
Si utilizas suscripciones de envío, es posible que debas aumentar el parámetro de configuración del plazo límite de confirmación. También puedes seguir las prácticas recomendadas para mantener una suscripción en buen estado.
Reenvío ocasional de mensajes
Cuando veas que los mensajes se vuelven a enviar antes de que venza el plazo de confirmación o después de que se confirmaron en unos segundos, Pub/Sub se está comportando según lo esperado. No deberías ver estos picos de reenvío con frecuencia, pero, cuando se produzcan, es probable que ocurran en varios mensajes simultáneamente. Tu sistema debe estar diseñado para tolerar estos duplicados ocasionales.
Reenvío repetido de algunos mensajes
Cuando veas que se entregan una pequeña cantidad de mensajes varias veces, primero confirma que los reconoces. Si no es así, averigua por qué tu suscriptor no procesa los mensajes correctamente. Te recomendamos que configures un tema de mensajes no entregados para evitar más reintentos de entrega. Si confirmas la recepción del mensaje, es posible que Pub/Sub siga funcionando según lo esperado. Si bien es muy poco frecuente, es posible que una pequeña cantidad de mensajes se entreguen varias veces si hay interrupciones internas en la red o el hardware. En estos casos, el servicio intenta recuperarse por sí solo, pero las soluciones pueden tardar varios minutos en activarse.
Tu sistema debe tolerar los reintentos de entrega. Puedes reducir la probabilidad de que esto suceda si te aseguras de procesar y confirmar los mensajes lo más rápido 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 genera una mayor latencia de publicación a suscripción. Antes de habilitar esta función, evalúa si la compensación de una latencia más alta es aceptable para tu caso de uso.
Prácticas recomendadas para la mensajería ordenada en la suscripción
Si usas el orden de mensajes, asegúrate de cumplir con lo siguiente:
Elige suscripciones de StreamingPull o Pull. En el caso de una suscripción de envío, Pub/Sub solo admite un mensaje pendiente para cada clave de ordenamiento a la vez. Enviar solicitudes push paralelas en esta situación sería similar a enviar varios lotes de mensajes para la misma clave de ordenamiento para extraer suscriptores de forma simultánea. Por lo tanto, no se recomiendan las suscripciones push para los temas en los que se publican con frecuencia varios mensajes con la misma clave de ordenamiento o en los que la latencia es extremadamente importante.
Habilita el ordenamiento de mensajes en la suscripción. En el lado del publicador, si envías mensajes con una clave de ordenamiento y en la misma región, puedes configurar los suscriptores para que reciban esos mensajes en orden. Del lado del suscriptor, habilita la propiedad de ordenamiento de mensajes solo para las suscripciones para las que quieras recibir mensajes ordenados. Según el estado de la propiedad, cada suscripción adjunta al tema puede determinar si necesita una entrega ordenada sin afectarse mutuamente.
Confirma la recepción de los mensajes en orden. Cuando se usa la entrega ordenada, las confirmaciones de recepción de los mensajes posteriores no se procesan hasta que se procesan las confirmaciones de recepción de los mensajes anteriores por clave de ordenamiento. Por ejemplo, si tienes los mensajes 1, 2 y 3 con la misma clave de ordenamiento, los recibes todos y solo confirmas la recepción del mensaje 3, el servicio no considera que se confirmó la recepción del mensaje 3 hasta que también se confirme la recepción de los mensajes 1 y 2. Si nunca se reciben las confirmaciones de los mensajes 1 y 2, se vuelven a entregar los mensajes 1, 2 y 3.
Resumen de prácticas recomendadas
En la siguiente tabla, se resumen las prácticas recomendadas de este documento:
Tema | Tarea |
---|---|
Elige un tipo de suscripción | Elige el tipo de suscripción adecuado para las necesidades de tu empresa. Si tu suscripción lo admite, también usa la biblioteca cliente de alto nivel. |
Cómo volver a reproducir un mensaje confirmado | Procesa un mensaje antes de confirmarlo. O bien, configúrala para una operación de búsqueda, de modo que no pierdas los mensajes confirmados. |
Control de flujo | Configura el control de flujo en la configuración del suscriptor para asegurarte de que los suscriptores no se sobrecarguen hasta que se active el ajuste de escala automático o pase el tiempo. |
Ordena mensajes | Cuando uses mensajes ordenados, elige StreamingPull o Pull, habilita el ordenamiento de mensajes en la suscripción y confirma los mensajes en orden. |