El control de simultaneidad es una función disponible en la biblioteca de cliente de alto nivel de Pub/Sub. También puedes implementar tu propio control de simultaneidad cuando uses una biblioteca de bajo nivel.
La compatibilidad con el control de simultaneidad depende del lenguaje de programación de la biblioteca de cliente. En el caso de las implementaciones de lenguajes que admiten subprocesos paralelos, como C++, Go y Java, las bibliotecas de cliente eligen un número de subprocesos predeterminado.
Puede que esta opción no sea la más adecuada para tu aplicación. Por ejemplo, si tu aplicación de suscriptor no puede seguir el ritmo del volumen de mensajes entrantes y no está limitada por la CPU, debes aumentar el número de subprocesos. En el caso de las operaciones de procesamiento de mensajes que requieren un uso intensivo de la CPU, puede ser adecuado reducir el número 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 editores para el control de la simultaneidad, consulta Control de la simultaneidad.
Configuraciones de control de simultaneidad
Los valores predeterminados de las variables de control de simultaneidad y los nombres de las variables pueden variar en las bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API.
Por ejemplo, en la biblioteca de cliente de Java, los métodos para configurar el control de simultaneidad son setParallelPullCount()
, setExecutorProvider()
, setSystemExecutorProvider()
y setChannelProvider()
.
setParallelPullCount() te permite decidir cuántas secuencias abrir. Puedes abrir más flujos si tu cliente de suscriptor puede gestionar más datos de los que se envían en un solo flujo, que son 10 MBps.
setExecutorProvider() te permite personalizar el proveedor de ejecutores que se usa para procesar mensajes. Por ejemplo, puedes cambiar el proveedor del ejecutor por uno que devuelva un único ejecutor compartido con un número limitado de hilos en varios clientes suscriptores. Esta configuración ayuda a limitar el número de hilos creados. El número total de subprocesos utilizados para el control de la simultaneidad depende del proveedor de ejecutores que se haya pasado en la biblioteca de cliente y del número de extracciones paralelas.
setSystemExecutorProvider() te permite personalizar el proveedor del ejecutor que se usa para la gestión de arrendamientos. Por lo general, no se configura este valor a menos que quieras usar el mismo proveedor de ejecutor en
setExecutorProvider
ysetSystemExecutorProvider
. Por ejemplo, puedes usar el mismo proveedor de ejecutores si tienes varias suscripciones de bajo rendimiento. Si se usa el mismo valor, se limita el número de hilos del cliente.setChannelProvider() te permite personalizar el proveedor de canales que se usa para abrir conexiones a Pub/Sub. Normalmente, no se configura este valor a menos que quieras usar el mismo canal en varios clientes de suscriptor. Si se reutiliza un canal en demasiados clientes, pueden producirse errores
GOAWAY
oENHANCE_YOUR_CALM
. Si ves estos errores en los registros de tu aplicación o en Cloud Logs, crea más canales.
Ejemplos de código para el control de la simultaneidad
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.
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.
Siguientes pasos
Consulta las otras opciones de entrega que puedes configurar para una suscripción:
Gestionar fallos de mensajes con la política de reintentos de suscripción
Reenviar mensajes no entregados a un tema de mensajes fallidos
Volver a reproducir mensajes confirmados anteriormente o eliminar mensajes definitivamente
Ampliar el tiempo de confirmación con la gestión de concesiones