En este documento se proporciona información sobre cómo usar el control del flujo con los mensajes publicados en un tema.
Información sobre el control de flujo
Un cliente editor puede intentar publicar mensajes más rápido de lo que es capaz de enviar datos al servicio Pub/Sub. Los clientes están limitados por muchos factores, entre los que se incluyen los siguientes:
- Capacidad de CPU, RAM y red de la máquina
- Ajustes de red, como el número de solicitudes pendientes y el ancho de banda disponible
- La latencia de cada solicitud de publicación, que viene determinada en gran medida por las conexiones de red entre el servicio Pub/Sub, el cliente y Google Cloud
Si la frecuencia de solicitudes de publicación supera estos límites, las solicitudes se acumularán en la memoria hasta que fallen con un error DEADLINE_EXCEEDED
. Esto es especialmente probable cuando se publican decenas de miles de mensajes en un bucle, lo que genera miles de solicitudes en milisegundos.
Para diagnosticar este problema, consulta las métricas del lado del servidor en Monitoring. No podrás ver las solicitudes que hayan fallado con DEADLINE_EXCEEDED
, solo las que se hayan completado correctamente. La tasa de solicitudes correctas indica la capacidad de procesamiento de tus máquinas cliente, lo que proporciona una base para configurar el control de flujo.
Para mitigar los problemas de velocidad de flujo, configure su cliente editor con control de flujo para limitar la frecuencia de las solicitudes de publicación. Puede configurar el número máximo de bytes asignados a las solicitudes pendientes y el número máximo de mensajes pendientes permitidos. Define estos límites en función de la capacidad de procesamiento de tus máquinas cliente.
Antes de empezar
Antes de configurar el flujo de trabajo de publicación, asegúrate de que has completado las siguientes tareas:
- Consulta información sobre los temas y el flujo de trabajo de publicación.
- Crea un tema.
Roles obligatorios
Para obtener los permisos que necesitas para usar el control de flujo, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Editor de Pub/Sub (roles/pubsub.publisher
) en tu tema.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Necesitas permisos adicionales para crear o actualizar temas y suscripciones.
Usar el control del flujo con mensajes
El control de flujo de Publisher está disponible mediante las bibliotecas de cliente de Pub/Sub en los siguientes idiomas:
C++
Antes de probar este ejemplo, sigue las instrucciones de configuración de C++ que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de C++ de Pub/Sub.
Go
En el siguiente ejemplo se usa la versión principal de la biblioteca de cliente de Pub/Sub de Go (v2). Si sigues usando la biblioteca v1, consulta la guía de migración a la versión 2. Para ver una lista de ejemplos de código de la versión 1, consulta los ejemplos de código obsoletos.
Antes de probar este ejemplo, sigue las instrucciones de configuración de Go que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de Pub/Sub.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración de Java que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de Java de Pub/Sub.
Node.js
Antes de probar este ejemplo, sigue las instrucciones de configuración de Node.js que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de Node.js de Pub/Sub.
Node.js
Antes de probar este ejemplo, sigue las instrucciones de configuración de Node.js que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de Node.js de Pub/Sub.
Python
Antes de probar este ejemplo, sigue las instrucciones de configuración de Python que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de Python de Pub/Sub.
Ruby
En el siguiente ejemplo se usa la biblioteca de cliente de Ruby Pub/Sub v3. Si sigues usando la biblioteca v2, consulta la guía de migración a la versión 3. Para ver una lista de ejemplos de código de Ruby v2, consulta los ejemplos de código obsoletos.
Antes de probar este ejemplo, sigue las instrucciones de configuración de Ruby que se indican en la guía de inicio rápido sobre cómo usar bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API de Ruby de Pub/Sub.