En este documento, se proporciona información sobre la publicación de mensajes.
Una aplicación de publicador crea y envía mensajes a un tema. Pub/Sub ofrece la entrega de mensajes al menos una vez y el mejor esfuerzo para los suscriptores existentes.
El flujo general de una aplicación de publicador es el siguiente:
- Creación de un mensaje que contenga tus datos
- Envía una solicitud al servidor de Pub/Sub para publicar el mensaje en el tema especificado.
Antes de comenzar
Antes de configurar el flujo de trabajo de publicación, asegúrate de haber completado las siguientes tareas:
- Crea un <atrack-type="docs" l10n-attrs-original-order="href,track-type,track-name,track-metadata-position,track-metadata-end-goal" l10n-encryption-href="+GW+79F7MCZYP0DzhWLPbiaTrBhqSGjcpm-0="{/1}
- Opcional: Crea un <atrack-type="docs" l10n-attrs-original-order="href,track-type,track-name,track-metadata-position,track-metadata-end-goal" l10n-encryption-href="vvRXt9i6R0j+n15IHewF9JAoFujIhRYtsmaJEhYKYx84J"
-
A fin de obtener los permisos que necesitas para publicar mensajes en un tema, pídele a tu administrador que te otorgue el rol de IAM de Publicador de Pub/Sub (
roles/pubsub.publisher
). Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Necesitas permisos adicionales para crear o actualizar temas y suscripciones.
Formato del mensaje
Un mensaje consiste en campos con los datos y los metadatos del mensaje. Especifica al menos uno de los siguientes elementos en el mensaje:
- Los datos del mensaje
- Una clave de ordenamiento
- Atributos con metadatos adicionales
Si usas la API de REST, los datos de los mensajes deben estar codificados en base64.
El servicio Pub/Sub agrega los siguientes campos al mensaje:
- Un ID de mensaje único para el tema
- Una marca de tiempo del momento en que el servicio de Pub/Sub recibe el mensaje
Publique mensajes
Puede publicar mensajes con Google Cloud CLI o la API de Pub/Sub. Las bibliotecas cliente pueden publicar mensajes de forma asíncrona.
Consola
Para publicar un mensaje, sigue estos pasos:
En la consola de Google Cloud, ve a la página Temas de Pub/Sub.
Haz clic en el ID del tema.
En la página Detalles del tema en Mensajes, haz clic en Publicar mensaje.
En el campo Cuerpo del mensaje, ingresa los datos del mensaje.
Opcional: agrega atributos de mensaje.
Haz clic en Agregar un atributo.
Ingresa una clave y un valor para el atributo.
Haz clic en Publish (Publicar).
gcloud
Para publicar un mensaje, usa el comando gcloud pubsub topics publish:
gcloud pubsub topics publish TOPIC_ID \ --message=MESSAGE_DATA \ [--attribute=KEY="VALUE",...]
Reemplaza lo siguiente:
- TOPIC_ID: El ID del tema
- MESSAGE_DATA: Una string con los datos del mensaje
- KEY: La clave de un atributo de mensaje
- VALUE: El valor de la clave del atributo del mensaje
REST
Para publicar un mensaje, envía una solicitud POST como la siguiente:
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish Content-Type: application/json Authorization: Bearer $(gcloud auth application-default print-access-token)
Reemplaza lo siguiente:
- PROJECT_ID: El ID del proyecto con el tema
- TOPIC_ID: El ID del tema
Especifica los siguientes campos en el cuerpo de la solicitud:
{ "messages": [ { "attributes": { "KEY": "VALUE", ... }, "data": "MESSAGE_DATA", } ] }
Reemplaza lo siguiente:
- KEY: La clave de un atributo de mensaje
- VALUE: El valor de la clave del atributo del mensaje
- MESSAGE_DATA: Una string codificada en base64 con los datos del mensaje
El mensaje debe contener un campo de datos no vacío o al menos un atributo.
Si la solicitud se realiza correctamente, la respuesta es un objeto JSON con el ID de mensaje. El siguiente ejemplo es una respuesta con un ID de mensaje:
{ "messageIds": [ "19916711285", ] }
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++.
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
Antes de probar esta muestra, sigue las instrucciones de configuración de Go 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 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.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js 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 Node.js.
PHP
Antes de probar esta muestra, sigue las instrucciones de configuración de PHP 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 PHP.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python 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 Python.
Ruby
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby 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 Ruby.
Después de que publicas un mensaje, el servicio de Pub/Sub le muestra el ID del mensaje al publicador.
Usa atributos
Puedes incorporar atributos personalizados como metadatos en mensajes de Pub/Sub. Los atributos pueden ser strings de texto o strings de bytes. Puede tener un máximo de 100 atributos por mensaje.
Las claves de atributo no deben comenzar con goog
ni superar los 256 bytes.
Los valores de los atributos no deben superar los 1,024 bytes. El esquema del mensaje se puede representar de la siguiente manera:
{ "data": string, "attributes": { string: string, ... }, "messageId": string, "publishTime": string, "orderingKey": string }
El esquema PubsubMessage
de JSON se publica como parte de la documentación de REST y RPC. Puedes usar atributos personalizados para las marcas de tiempo de eventos.
gcloud
gcloud pubsub topics publish my-topic --message="hello" \ --attribute="origin=gcloud-sample,username=gcp,eventTime='2021-01-01T12:00:00Z'"
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++.
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
Antes de probar esta muestra, sigue las instrucciones de configuración de Go 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 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.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js 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 Node.js.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python 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 Python.
Ruby
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby 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 Ruby.
Cómo usar claves de ordenamiento
Si los mensajes tienen la misma clave de orden y publicas los mensajes en la misma región, los suscriptores pueden recibirlos en orden. La publicación de mensajes con claves de ordenamiento puede aumentar la latencia. Para publicar mensajes en la misma región, usa un extremo regional.
Puedes publicar mensajes con claves de ordenamiento mediante la consola de Google Cloud, Google Cloud CLI o la API de Pub/Sub.
Consola
En la consola de Google Cloud, ve a la página Temas de Pub/Sub.
Haz clic en el ID del tema.
En la página Detalles del tema en Mensajes, haz clic en Publicar mensaje.
En el campo Cuerpo del mensaje, ingresa los datos del mensaje.
En el campo Ordenamiento de mensajes, ingresa una clave de ordenamiento.
Haz clic en Publish (Publicar).
gcloud
Para publicar un mensaje con una clave de ordenamiento, usa el comando gcloud pubsub topics publish
y la marca --ordering-key
:
gcloud pubsub topics publish TOPIC_ID \ --message=MESSAGE_DATA \ --ordering-key=ORDERING_KEY
Reemplaza lo siguiente:
- TOPIC_ID: El ID del tema
- MESSAGE_DATA: Una string con los datos del mensaje
- ORDERING_KEY: Una string con clave de ordenamiento
REST
Para publicar un mensaje con una clave de ordenamiento, envía una solicitud POST como la siguiente:
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish Content-Type: application/json Authorization: Bearer $(gcloud auth application-default print-access-token)
Reemplaza lo siguiente:
- PROJECT_ID: El ID del proyecto con el tema
- TOPIC_ID: El ID del tema
Especifica los siguientes campos en el cuerpo de la solicitud:
{ "messages": [ { "attributes": { "KEY": "VALUE", ... }, "data": "MESSAGE_DATA", "ordering_key": "ORDERING_KEY", } ] }
Reemplaza lo siguiente:
- KEY: La clave de un atributo de mensaje
- VALUE: El valor de la clave del atributo del mensaje
- MESSAGE_DATA: Una string codificada en base64 con los datos del mensaje
- ORDERING_KEY: Una string con clave de ordenamiento
El mensaje debe contener un campo de datos no vacío o al menos un atributo.
Si la solicitud se realiza correctamente, la respuesta es un objeto JSON con el ID de mensaje. El siguiente ejemplo es una respuesta con un ID de mensaje:
{ "messageIds": [ "19916711285", ] }
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++.
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
Antes de probar esta muestra, sigue las instrucciones de configuración de Go 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 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.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js 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 Node.js.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python 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 Python.
Ruby
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby 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 Ruby.
Cuando falla la publicación con una clave de ordenamiento, los mensajes en cola de la misma clave de ordenamiento del publicador fallan, incluidas las solicitudes de publicación futuras de esta clave. Debes reanudar la publicación con claves de ordenamiento cuando ocurran esas fallas. Para ver un ejemplo de cómo reanudar la operación de publicación, consulta Reintenta solicitudes con claves de ordenamiento.
Usar esquema
Puedes publicar mensajes en un tema asociado con un esquema. Para obtener más información, consulta Crea y administra esquemas. Debes codificar los mensajes en el esquema y el formato que especificaste cuando creaste el tema.
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++.
Avro ProtoC#
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#.
Avro ProtoGo
Antes de probar esta muestra, sigue las instrucciones de configuración de Go 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 Go.
Avro ProtoJava
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.
Avro ProtoNode.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js 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 Node.js.
Avro Búfer de protocoloPHP
Antes de probar esta muestra, sigue las instrucciones de configuración de PHP 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 PHP.
Avro Búfer de protocoloPython
Antes de probar esta muestra, sigue las instrucciones de configuración de Python 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 Python.
Avro Búfer de protocoloRuby
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby 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 Ruby.
Avro Búfer de protocoloMensajes por lotes en una solicitud de publicación
Puedes usar la biblioteca cliente de Pub/Sub para que el publicador publique mensajes en un tema. La biblioteca cliente usa la función de lotes para publicar varios mensajes juntos en una llamada de servicio. La agrupación en lotes o la agrupación de mensajes ayuda a Pub/Sub a lograr una mayor capacidad de procesamiento de los mensajes. Puedes ajustar el tamaño del lote según tus necesidades comerciales.
La mensajería por lotes está habilitada de forma predeterminada en una biblioteca cliente. La mensajería por lotes crea la latencia para mensajes individuales. Los mensajes individuales deben ponerse en cola en la memoria hasta que se complete el lote correspondiente. Solo entonces, los mensajes se publican en el tema.
Si el costo no es una consideración, puedes crear varios clientes publicadores y, luego, inhabilitar los mensajes por lotes. Este proceso minimiza la latencia y maximiza la capacidad de procesamiento mediante el escalamiento horizontal de la cantidad de publicadores. Sin embargo, el costo suele ser una consideración. El envío de varios mensajes en una sola solicitud de publicación es una forma de alcanzar una capacidad de procesamiento equivalente con menos publicadores. Si estás dispuesto a sacrificar la latencia para ahorrar costos, en especial si tu aplicación se ocupa de una cantidad bastante grande de mensajes en un período corto, puedes usar mensajes por lotes.
La mensajería por lotes te permite configurar el tamaño del lote en bytes o la cantidad de mensajes y, también, la hora después de la cual se publica el lote. Los lotes pequeños de mensajes durante la hora de publicación máxima pueden ayudarte a controlar la latencia.
Configura la mensajería por lotes en una biblioteca cliente
Puedes agrupar los mensajes en lotes según el tamaño de la solicitud de mensaje, la cantidad de mensajes y la hora. Los valores predeterminados de las variables de mensajería por lotes y los nombres de las variables pueden diferir en las bibliotecas cliente. Por ejemplo, en la biblioteca cliente de Python, las siguientes variables controlan la mensajería por lotes:
Variable | Descripción | Valor |
---|---|---|
max_mensajes | La cantidad de mensajes en un lote. | Predeterminado=100 |
max_bytes | El tamaño máximo de un lote en MB. | Predeterminado=1 MB |
latencia_máx | El momento en el que se publica un lote, incluso si no está completo. | Predeterminado=10 ms |
Puedes especificar uno o los tres valores en la biblioteca cliente. Si se cumple alguno de los valores de las variables de mensajería por lotes, la biblioteca cliente publica el siguiente lote de mensajes.
Consulta las siguientes muestras de código para obtener información sobre cómo establecer la configuración de mensajes por lotes para tu editor.
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++.
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
Antes de probar esta muestra, sigue las instrucciones de configuración de Go 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 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.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js 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 Node.js.
PHP
Antes de probar esta muestra, sigue las instrucciones de configuración de PHP 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 PHP.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python 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 Python.
Ruby
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby 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 Ruby.
Inhabilitar mensajes por lotes
Para desactivar el procesamiento por lotes en tu biblioteca cliente, establece el valor de max_messages
en 1.
Mensajería por lotes y entrega ordenada
Con la entrega ordenada, si no se confirma cualquier mensaje en el lote, todos los mensajes del lote, incluidos los que se enviaron antes del mensaje que no se confirmó, se vuelven a entregar.
Cuotas y límites de los mensajes por lotes
Antes de configurar la mensajería por lotes, considera el efecto de factores como la cuota de capacidad de procesamiento de publicación y el tamaño máximo de un lote. Las bibliotecas cliente de alto nivel garantizan que las solicitudes por lotes se mantengan dentro de los límites especificados.
- El tamaño mínimo de solicitud solicitado para los costos es 1,000 bytes, incluso si el tamaño real del mensaje puede ser inferior a 1,000 bytes.
- Pub/Sub tiene un límite de 10 MB de tamaño o 1,000 mensajes para una sola solicitud de publicación por lotes.
Para obtener más información, consulta Cuotas y límites de Pub/Sub.
Comprimir mensajes
Si usas Pub/Sub para publicar mensajes que representan una gran cantidad de datos, puedes usar gRPC a fin de comprimir tus datos y ahorrar costos de red antes de que el cliente publicador envíe la solicitud de publicación. La compresión de Pub/Sub para gRPC usa el algoritmo de Gzip.
La proporción de compresión del uso de la función de compresión del cliente de gRPC es diferente para los diferentes clientes publicadores y depende de los siguientes factores:
Cantidad de datos. El índice de compresión mejora cuando el tamaño de la carga útil aumenta de unos cientos de bytes a muchos kilobytes de datos. La configuración por lotes de una solicitud de publicación decide la cantidad de datos que se incluyen en cada solicitud de publicación. Te recomendamos que actives la configuración por lotes junto con la compresión de gRPC para obtener los mejores resultados.
Tipo de datos. Los datos basados en texto, como JSON o XML, son más fáciles de comprimir en comparación con los datos binarios, como las imágenes.
Si el cliente publicador está en Google Cloud, puedes usar la métrica Bytes enviados (instance/network/sent_bytes_count
) para medir la capacidad de procesamiento de publicación en bytes. Si el cliente del publicador usa una aplicación diferente, debes usar las herramientas específicas del cliente para realizar la medición.
En la muestra de código de esta sección, se muestra un fragmento de código de una biblioteca cliente de Java que también incluye compresión de gRPC.
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++.
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.
Solicitudes de reintento
Las fallas de publicación se reintentan de forma automática, excepto los errores que no garantizan reintentos. En este código, se muestra cómo crear un publicador con opciones de configuración de reintento personalizadas (ten en cuenta que no todas las bibliotecas cliente admiten la configuración de reintento personalizada; consulta la documentación de referencia de la API para el lenguaje que elegiste):
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++.
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#.
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.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js 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 Node.js.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python 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 Python.
La configuración de reintento controla cómo las bibliotecas cliente de Pub/Sub reintentan las solicitudes de publicación. Las bibliotecas cliente tienen cualquiera de las siguientes configuraciones de reintento:
- Tiempo de espera de solicitud inicial: La cantidad de tiempo antes de que una biblioteca cliente deja de esperar a que se complete la solicitud de publicación inicial.
- Retraso de reintentos: La cantidad de tiempo que una biblioteca cliente espera para reintentar una solicitud después de que se agota el tiempo de espera de la solicitud.
- Tiempo de espera total: La cantidad de tiempo después de que una biblioteca cliente deje de reintentar las solicitudes de publicación.
Para reintentar las solicitudes de publicación, el tiempo de espera de la solicitud inicial debe ser menor que el tiempo de espera total. Por ejemplo, si usas la retirada exponencial, las bibliotecas cliente calculan el tiempo de espera de la solicitud y la demora en el reintento de la siguiente manera:
- Después de cada solicitud de publicación, el tiempo de espera de la solicitud aumenta según el multiplicador de tiempo de espera de la solicitud, hasta el tiempo máximo de espera de la solicitud.
- Después de cada reintento, la demora de reintentos aumenta según el multiplicador de demora en reintentos, hasta el retraso máximo de reintentos.
Reintenta solicitudes con claves de ordenamiento
Cuando una biblioteca cliente vuelve a intentar una solicitud y el mensaje tiene una clave de ordenamiento, la biblioteca cliente reintenta la solicitud de forma repetida, sin importar la configuración de reintento.
Si se produce un error que no se puede reintentar, la biblioteca cliente no publica el mensaje y deja de publicar otros mensajes con la misma clave de ordenamiento. Por ejemplo, cuando un publicador envía un mensaje a un tema que no existe, se produce un error que no se puede reintentar. Para continuar publicando mensajes con la misma clave de ordenamiento, llama a un método para reanudar la publicación y comienza a realizar publicaciones nuevamente.
En el siguiente ejemplo, se muestra cómo reanudar la publicación de mensajes con la misma clave de ordenamiento.
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++.
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
Antes de probar esta muestra, sigue las instrucciones de configuración de Go 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 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.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js 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 Node.js.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python 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 Python.
Ruby
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby 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 Ruby.
Control de flujo
Un cliente publicador puede intentar publicar mensajes más rápido de lo que ese cliente puede enviar datos al servicio de Pub/Sub. Los clientes están limitados por muchos factores, incluidos los siguientes:
- El CPU, la RAM y la capacidad de red de la máquina
- La configuración de red, como la cantidad de solicitudes pendientes y el ancho de banda disponible
- La latencia de cada solicitud de publicación, determinada en gran medida por las conexiones de red entre el servicio de Pub/Sub, el cliente y Google Cloud
Si la tasa de solicitudes de publicación supera estos límites, las solicitudes se acumulan en la memoria hasta que fallan con un error DEADLINE_EXCEEDED
. Es muy probable que esto suceda cuando se publican decenas de miles de mensajes en un bucle, lo que genera miles de solicitudes en milisegundos.
Para diagnosticar este problema, puedes verificar las métricas del servidor en Monitoring. No podrás ver las solicitudes que fallaron con DEADLINE_EXCEEDED
, solo las solicitudes exitosas. La tasa de solicitudes exitosas te indica la capacidad de procesamiento de las máquinas de cliente, lo que proporciona un modelo de referencia para configurar el control de flujo.
A fin de mitigar los problemas de la tasa de flujo, configura tu cliente publicador con un control de flujo para limitar la frecuencia de solicitudes de publicación. Puedes configurar la cantidad máxima de bytes asignados para las solicitudes pendientes y la cantidad máxima de mensajes pendientes permitidos. Establece estos límites según la capacidad de procesamiento de las máquinas de cliente.
El control de flujo del publicador está disponible a través de las bibliotecas cliente de Pub/Sub en los siguientes lenguajes:
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
Antes de probar esta muestra, sigue las instrucciones de configuración de Go 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 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.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js 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 Node.js.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración de Python 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 Python.
Ruby
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby 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 Ruby.
Control de simultaneidad
La asistencia para la simultaneidad depende de tu lenguaje de programación. Consulta la documentación de referencia de la API para obtener más información.
En el siguiente ejemplo, se ilustra cómo controlar la simultaneidad en un publicador:
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
Antes de probar esta muestra, sigue las instrucciones de configuración de Go 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 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
Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby 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 Ruby.
Supervisa a un publicador
Cloud Monitoring proporciona una serie de métricas para supervisar temas.
Para supervisar un tema y mantener un publicador en buen estado, consulta Cómo mantener un publicador en buen estado.
¿Qué sigue?
Para restringir las ubicaciones en las que Pub/Sub almacena datos de mensajes, consulta Restringe las ubicaciones de recursos de Pub/Sub.
Para obtener más información sobre cómo recibir mensajes, consulta Elige un tipo de suscripción.