El control de simultaneidad es una función disponible en la biblioteca cliente de alto nivel de Pub/Sub. También puedes implementar tu propio control de simultaneidad cuando usas una biblioteca de bajo nivel.
La compatibilidad con el control de simultaneidad depende del lenguaje de programación de la biblioteca cliente. En el caso de las implementaciones de lenguajes que admiten subprocesos paralelos, como C++, Go y Java, las bibliotecas cliente realizan una elección predeterminada para la cantidad de subprocesos.
Esta elección podría no ser óptima para tu aplicación. Por ejemplo, si tu aplicación de suscriptor no se mantiene al día con el volumen de mensajes entrantes y no está limitada por la CPU, debes aumentar el recuento de subprocesos. Para las operaciones de procesamiento de mensajes que requieren mucha CPU, puede ser adecuado reducir la cantidad de subprocesos.
En esta página, se explica el concepto de control de simultaneidad y cómo configurar la función para tus clientes suscriptores. Para configurar tus clientes publicadores para el control de simultaneidad, consulta Control de simultaneidad.
Configuraciones de control de simultaneidad
Los valores predeterminados de las variables de control de simultaneidad y los nombres de las variables pueden diferir entre las bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API.
Por ejemplo, en la biblioteca cliente de Java, los métodos para configurar el control de simultaneidad son setParallelPullCount(), setExecutorProvider(), setSystemExecutorProvider() y setChannelProvider().
setParallelPullCount() te permite decidir cuántos flujos abrir. Puedes abrir más transmisiones si tu cliente suscriptor puede controlar más datos de los que se envían en una sola transmisión, que son 10 MBps.
setExecutorProvider() te permite personalizar el proveedor de ejecutores que se usa para procesar mensajes. Por ejemplo, puedes cambiar el proveedor de ejecutores por uno que devuelva un solo ejecutor compartido con una cantidad limitada de subprocesos en varios clientes suscriptores. Esta configuración ayuda a limitar la cantidad de subprocesos creados. La cantidad total de subprocesos que se usan para el control de simultaneidad depende del proveedor del ejecutor que se pasa en la biblioteca cliente y el recuento de extracción paralela.
setSystemExecutorProvider() te permite personalizar el proveedor de ejecutores que se usa para la administración de arrendamientos. Por lo general, no configuras este valor, a menos que quieras usar el mismo proveedor de ejecutores en
setExecutorProviderysetSystemExecutorProvider. Por ejemplo, puedes usar el mismo proveedor de ejecutores si tienes varias suscripciones con un rendimiento bajo. Usar el mismo valor limita la cantidad de subprocesos en el cliente.setChannelProvider() te permite personalizar el proveedor de canales que se usa para abrir conexiones a Pub/Sub. Por lo general, no configuras este valor, a menos que quieras usar el mismo canal en varios clientes suscriptores. Reutilizar un canal en demasiados clientes puede generar errores
GOAWAYoENHANCE_YOUR_CALM. Si ves estos errores en los registros de tu aplicación o en los registros de Cloud, crea más canales.
Muestras de código para el control de simultaneidad
C++
Antes de probar esta muestra, sigue las instrucciones de configuración de C++ en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C++.
Go
En la siguiente muestra, se usa la versión principal de la biblioteca cliente de Pub/Sub de Go (v2). Si aún usas la biblioteca de la versión 1, consulta la guía de migración a la versión 2. Para ver una lista de muestras de código de la versión 1, consulta las muestras de código obsoletas.
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go que se encuentran en la guía de inicio rápido sobre cómo usar bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración de Java en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Java.
Ruby
En el siguiente ejemplo, se usa la biblioteca cliente de Pub/Sub de Ruby v3. Si aún usas la biblioteca de la versión 2, consulta la guía de migración a la versión 3. Para ver una lista de muestras de código de Ruby v2, consulta las muestras de código obsoletas.
Antes de probar este ejemplo, sigue las instrucciones de configuración para Ruby que se encuentran en la Guía de inicio rápido: Uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Ruby.
Rust
Antes de probar este ejemplo, sigue las instrucciones de configuración de Rust en Guía de inicio rápido: Uso de bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Pub/Sub en Rust.
¿Qué sigue?
Obtén información sobre las otras opciones de entrega que puedes configurar para una suscripción:
Cómo controlar los aumentos repentinos transitorios con el control de flujo
Cómo controlar las fallas de mensajes con la política de reintentos de suscripción
Reenvía mensajes no entregados a un tema de mensajes no entregados
Vuelve a reproducir mensajes confirmados anteriormente o borra mensajes
Extiende el tiempo de confirmación con la administración de arrendamientos