En este documento se proporciona información sobre la publicación de mensajes.
Una aplicación de editor crea y envía mensajes a un tema. Pub/Sub ofrece la entrega de mensajes al menos una vez y la ordenación con el mejor esfuerzo posible a los suscriptores actuales.
El flujo general de una solicitud de editor es el siguiente:
- Crea 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 empezar
Antes de configurar el flujo de trabajo de publicación, asegúrate de que has completado las siguientes tareas:
- Consulta información sobre el flujo de trabajo de publicación.
- Crea un tema.
- Elige y crea una suscripción.
Roles obligatorios
Para obtener los permisos que necesitas para publicar mensajes en un tema, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Editor de Pub/Sub (roles/pubsub.publisher
) en el 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.
Formato de los mensajes
Un mensaje consta de 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 ordenación
- Atributos con metadatos adicionales
El servicio Pub/Sub añade los siguientes campos al mensaje:
- ID de mensaje único del tema.
- Marca de tiempo que indica cuándo recibe el mensaje el servicio Pub/Sub.
Para obtener más información sobre los mensajes, consulta Formato de los mensajes.
Publica mensajes
Puedes publicar mensajes con la Google Cloud consola, la CLI de Google Cloud, la API Pub/Sub y las bibliotecas de cliente. Las bibliotecas de cliente pueden publicar mensajes de forma asíncrona.
En los siguientes ejemplos se muestra cómo publicar un mensaje en un tema.
Consola
Para publicar un mensaje, sigue estos pasos:
En la Google Cloud consola, 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, introduce los datos del mensaje.
Haz clic en 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",...]
Haz los cambios siguientes:
- TOPIC_ID: el ID del tema
- MESSAGE_DATA: una cadena con los datos del mensaje.
- KEY: la clave de un atributo de mensaje
- VALUE: el valor de la clave del atributo de 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)
Haz los cambios siguientes:
- PROJECT_ID: el ID del proyecto que contiene 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", } ] }
Haz los cambios siguientes:
- KEY: la clave de un atributo de mensaje
- VALUE: el valor de la clave del atributo de mensaje
- MESSAGE_DATA: cadena 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 del mensaje. En el siguiente ejemplo se muestra una respuesta con un ID de mensaje:
{ "messageIds": [ "19916711285", ] }
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.
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.
PHP
Antes de probar este ejemplo, sigue las instrucciones de configuración de PHP 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 Pub/Sub para PHP.
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.
Una vez que publiques un mensaje, el servicio Pub/Sub devolverá el ID del mensaje al editor.
Usar atributos para publicar un mensaje
Puede insertar atributos personalizados como metadatos en los mensajes de Pub/Sub. Los atributos se usan para proporcionar información adicional sobre el mensaje, como su prioridad, origen o destino. Los atributos también se pueden usar para filtrar mensajes en la suscripción.
Sigue estas directrices para usar atributos en tus mensajes:
Los atributos pueden ser cadenas de texto o cadenas de bytes.
Puede incluir un máximo de 100 atributos por mensaje.
Las claves de atributo no pueden empezar por
goog
ni tener un tamaño superior a 256 bytes.Los valores de los atributos no deben superar los 1024 bytes.
El esquema del mensaje se puede representar de la siguiente manera:
{ "data": string, "attributes": { string: string, ... }, "messageId": string, "publishTime": string, "orderingKey": string }
En el caso de los duplicados del lado de la publicación, es posible ver diferentes valores de publishTime
para el mismo mensaje original del lado del cliente, incluso con el mismo messageId
.
El esquema JSON de PubsubMessage
se publica como parte de la documentación de REST y RPC. Puede usar atributos personalizados para las marcas de tiempo de los eventos.
En los siguientes ejemplos se muestra cómo publicar un mensaje con atributos en un tema.
Consola
Para publicar un mensaje con atributos, sigue estos pasos:
En la Google Cloud consola, ve a la página Temas.
Haz clic en el tema en el que quieras publicar mensajes.
En la página de detalles del tema, haz clic en Mensajes.
Haz clic en Publicar mensaje.
En el campo Cuerpo del mensaje, introduce los datos del mensaje.
En Atributos de mensaje, haga clic en Añadir atributo.
Introduzca un par clave-valor.
Añada más atributos si es necesario.
Haz clic en Publicar.
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 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.
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.
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.
Usar claves de ordenación para publicar un mensaje
Para recibir los mensajes en orden en tus clientes suscriptores, debes configurar tus clientes editores para que publiquen mensajes con claves de ordenación.
Para entender el concepto de ordenación de claves, consulta Ordenar mensajes.
A continuación, se indica una lista de consideraciones clave sobre la mensajería ordenada para los clientes editores:
Ordenación en un solo cliente editor: cuando un solo cliente editor publica mensajes con la misma clave de ordenación en la misma región, el cliente suscriptor recibe esos mensajes en el mismo orden en el que se publicaron. Por ejemplo, si un cliente editor publica los mensajes 1, 2 y 3 con la clave de ordenación A, el cliente suscriptor los recibe en el orden 1, 2 y 3.
Ordenación en varios clientes editores: el orden de los mensajes recibidos por los clientes suscriptores es coherente con el orden en el que se publicaron en la misma región, incluso cuando varios clientes editores usan la misma clave de ordenación. Sin embargo, los clientes editores no tienen conocimiento de este pedido.
Por ejemplo, si los clientes X e Y de un editor publican mensajes con la clave de ordenación A, y Pub/Sub recibe el mensaje de X antes que el de Y, todos los clientes de los suscriptores recibirán el mensaje de X antes que el de Y. Si se requiere un orden estricto de los mensajes en diferentes clientes de editores, estos clientes deben implementar un mecanismo de coordinación adicional para asegurarse de que no publican mensajes con la misma clave de ordenación simultáneamente. Por ejemplo, se puede usar un servicio de bloqueo para mantener la propiedad de una clave de ordenación durante la publicación.
Ordenación entre regiones: la garantía de entrega ordenada solo se aplica cuando las publicaciones de una clave de ordenación se encuentran en la misma región. Si tu aplicación de editor publica mensajes con la misma clave de ordenación en diferentes regiones, no se podrá aplicar el orden en esas publicaciones. Los suscriptores pueden conectarse a cualquier región y la garantía de orden se mantiene.
Cuando ejecutas tu aplicación en Google Cloud, se conecta de forma predeterminada al endpoint de Pub/Sub de la misma región. Por lo tanto, ejecutar tu aplicación en una sola región dentro deGoogle Cloud generalmente asegura que interactúas con una sola región.
Si ejecutas tu aplicación de editor fuera deGoogle Cloud o en varias regiones, puedes asegurarte de que te conectas a una sola región usando un endpoint de ubicación al configurar tu cliente Pub/Sub. Todos los endpoints de ubicación de Pub/Sub apuntan a regiones únicas. Para obtener más información sobre los endpoints de ubicación, consulta Endpoints de Pub/Sub. Para ver una lista de todos los endpoints de ubicación de Pub/Sub, consulta la lista de endpoints de ubicación.
Errores de publicación: si se produce un error al publicar con una clave de ordenación, se producirá un error en los mensajes de la misma clave de ordenación que estén en la cola del editor, incluidas las futuras solicitudes de publicación de esta clave de ordenación. Cuando se produzcan estos fallos, debes reanudar la publicación con claves de ordenación. Para ver un ejemplo de cómo reanudar la operación de publicación, consulta Reintentar solicitudes con claves de ordenación.
Puedes publicar mensajes con claves de ordenación mediante la Google Cloud consola, la CLI de Google Cloud, la API de Pub/Sub o las bibliotecas de cliente.
Consola
Para publicar un mensaje con atributos, sigue estos pasos:
En la Google Cloud consola, ve a la página Temas.
Haz clic en el tema en el que quieras publicar mensajes.
En la página de detalles del tema, haz clic en Mensajes.
Haz clic en Publicar mensaje.
En el campo Cuerpo del mensaje, introduce los datos del mensaje.
En el campo Orden de los mensajes, introduce una clave de ordenación.
Haz clic en Publicar.
gcloud
Para publicar un mensaje con una clave de ordenación, 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
Haz los cambios siguientes:
- TOPIC_ID: el ID del tema
- MESSAGE_DATA: una cadena con los datos del mensaje.
- ORDERING_KEY: una cadena con una clave de ordenación.
REST
Para publicar un mensaje con una clave de ordenación, 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)
Haz los cambios siguientes:
- PROJECT_ID: el ID del proyecto que contiene 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", } ] }
Haz los cambios siguientes:
- KEY: la clave de un atributo de mensaje
- VALUE: el valor de la clave del atributo de mensaje
- MESSAGE_DATA: cadena codificada en base64 con los datos del mensaje
- ORDERING_KEY: una cadena con una clave de ordenación.
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 del mensaje. En el siguiente ejemplo se muestra una respuesta con un ID de mensaje:
{ "messageIds": [ "19916711285", ] }
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.
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.
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.
Monitorizar a un editor
Cloud Monitoring proporciona varias métricas para monitorizar temas.
Para monitorizar un tema y mantener un editor en buen estado, consulta el artículo Mantener un editor en buen estado.
Siguientes pasos
Para restringir las ubicaciones en las que Pub/Sub almacena datos de mensajes, consulta Restringir las ubicaciones de recursos de Pub/Sub.
Para publicar mensajes con un esquema, consulta la descripción general de los esquemas.
Para saber cómo configurar opciones de entrega avanzadas, consulta lo siguiente: