En esta página, se explica cómo publicar mensajes en los temas de Lite. Puedes publicar mensajes con la biblioteca cliente de Pub/Sub Lite para Java.
Después de publicar mensajes y crear una suscripción Lite en un tema de Lite, puedes recibir mensajes de la suscripción de Lite.
Formato del mensaje
Un mensaje consiste en campos con los datos y los metadatos del mensaje. Especifica lo siguiente en el mensaje:
- Los datos del mensaje
- Una clave de ordenamiento
- Una hora del evento
- Atributos con metadatos adicionales
La biblioteca cliente asigna automáticamente el mensaje a una partición y el servicio de Pub/Sub Lite agrega los siguientes campos al mensaje:
- Un ID de mensaje único dentro de la partición
- Una marca de tiempo para cuando el servicio de Pub/Sub Lite almacena el mensaje en la partición
Publica mensajes
Para publicar mensajes, solicita una conexión de transmisión al tema Lite y, luego, envía mensajes mediante la conexión de transmisión.
En el siguiente ejemplo, se muestra cómo publicar mensajes en un tema Lite:
gcloud
Este comando requiere Python 3.6 o una versión superior, y requiere que se instale el paquete grpcio para Python. Para usuarios de MacOS, Linux y Cloud Shell, ejecuta lo siguiente:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Para publicar un mensaje, usa el comando gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--message=MESSAGE_DATA
Reemplaza lo siguiente:
- TOPIC_ID: el ID del tema de Lite
- LITE_LOCATION: La ubicación del tema de Lite
- MESSAGE_DATA: Una string con los datos del mensaje
Go
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Go en las bibliotecas cliente de Pub/Sub Lite.
Java
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.
Python
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.
La biblioteca cliente envía mensajes y maneja errores de forma asincrónica. Si se produce un error, la biblioteca cliente envía el mensaje de nuevo.
- El servicio de Pub/Sub Lite cierra la transmisión.
- La biblioteca cliente almacena en búfer los mensajes y restablece una conexión con el tema de Lite.
- La biblioteca cliente envía los mensajes en orden.
Después de que publicas un mensaje, el servicio de Pub/Sub Lite almacena el mensaje en una partición y le muestra el ID de mensaje al publicador.
Usa claves de ordenamiento
Si los mensajes tienen la misma clave de ordenamiento, la biblioteca cliente asigna los mensajes a la misma partición. La clave de ordenamiento debe ser una string de al menos 1,024 bytes.
La clave de ordenamiento está en el campo key
de un mensaje.
Puedes configurar claves de ordenamiento con la biblioteca cliente.
gcloud
Este comando requiere Python 3.6 o una versión superior, y requiere que se instale el paquete grpcio para Python. Para usuarios de MacOS, Linux y Cloud Shell, ejecuta lo siguiente:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Para publicar un mensaje, usa el comando gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--ordering-key=ORDERING_KEY \
--message=MESSAGE_DATA
Reemplaza lo siguiente:
- TOPIC_ID: el ID del tema de Lite
- LITE_LOCATION: La ubicación del tema de Lite
- ORDERING_KEY: Una string que se usa para asignar mensajes a particiones
- MESSAGE_DATA: Una string con los datos del mensaje
Go
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Go en las bibliotecas cliente de Pub/Sub Lite.
Java
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.
Python
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.
Puedes enviar varios mensajes a la misma partición mediante claves de ordenamiento, de modo que los suscriptores reciban los mensajes en orden. La biblioteca cliente puede asignar varias claves de orden a la misma partición.
Establece la hora del evento
Puedes usar la hora del evento para publicar tus mensajes Lite. La hora del evento es un atributo personalizado que puedes agregar a tu mensaje.
Puedes establecer la marca de tiempo del evento con la biblioteca cliente o gcloud CLI.
Este comando requiere Python 3.6 o una versión superior, y requiere que se instale el paquete grpcio para Python. Para usuarios de MacOS, Linux y Cloud Shell, ejecuta lo siguiente:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Para publicar un mensaje, usa el comando gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--event-time=EVENT_TIME \
--message=MESSAGE_DATA
Reemplaza lo siguiente:
TOPIC_ID: el ID del tema de Lite
LITE_LOCATION: La ubicación del tema de Lite
EVENT_TIME: Es la hora del evento especificada por el usuario. Para obtener más información sobre los formatos de hora, ejecuta
gcloud topic datetimes
.MESSAGE_DATA: Una string con los datos del mensaje
Usa atributos
Los atributos de mensajes son pares clave-valor con metadatos sobre el mensaje. Los atributos pueden ser strings de texto o bytes.
Los atributos están en el campo attributes
de un mensaje. Puedes configurar atributos con la biblioteca cliente.
gcloud
Este comando requiere Python 3.6 o una versión superior, y requiere que se instale el paquete grpcio para Python. Para usuarios de MacOS, Linux y Cloud Shell, ejecuta lo siguiente:
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Para publicar un mensaje, usa el comando gcloud pubsub lite-topics publish:
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--message=MESSAGE_DATA \
--attribute=KEY=VALUE,...
Reemplaza lo siguiente:
- TOPIC_ID: el ID del tema de Lite
- LITE_LOCATION: La ubicación del tema de Lite
- 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
Go
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Go en las bibliotecas cliente de Pub/Sub Lite.
Java
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.
Python
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.
Los atributos pueden indicar cómo procesar un mensaje. Los suscriptores pueden analizar el campo attributes
de un mensaje y procesarlo según sus atributos.
Agrupa los mensajes en lotes
La biblioteca cliente publica mensajes en lotes. Los lotes más grandes usan menos recursos de procesamiento, pero aumentan la latencia. Puedes cambiar el tamaño del lote con la configuración del lote.
En la siguiente tabla, se enumeran los parámetros de configuración de lotes que puedes configurar:
Configuración | Descripción | Default |
---|---|---|
Tamaño de la solicitud | El tamaño máximo del lote en bytes. | 3.5 MiB |
Cantidad de mensajes | La cantidad máxima de mensajes en un lote. | 1,000 mensajes |
Retraso de publicación | La cantidad de tiempo, en milisegundos, entre agregar el mensaje a un lote y enviar el lote al tema Lite. | 50 milésimas de segundo |
Puedes establecer la configuración de lotes con la biblioteca cliente.
Go
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Go en las bibliotecas cliente de Pub/Sub Lite.
Java
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.
Python
Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.
Cuando se inicia una aplicación de publicador, la biblioteca cliente crea un lote para cada partición en un tema de Lite. Por ejemplo, si un tema de Lite tiene dos particiones, los publicadores crean dos lotes y envían cada lote a una partición.
Después de publicar un mensaje, la biblioteca cliente lo almacena hasta que el lote supera el tamaño máximo de solicitud, la cantidad máxima de mensajes o el retraso de publicación.
Ordena mensajes
Los temas de Lite ordenan los mensajes de cada partición según los mensajes que publicas. Para asignar mensajes a la misma partición, usa una clave de ordenamiento.
Pub/Sub Lite entrega los mensajes de una partición en orden y los suscriptores pueden procesarlos en orden. Para obtener más información, consulta cómo recibir mensajes.
Idempotencia de publicación
Las bibliotecas cliente de Pub/Sub Lite admiten la publicación idempotente a partir de las siguientes versiones:
- java-pubsublite: Versión 1.10.0.
- python-pubsublite: Versión 1.8.0.
- google-cloud-go: Versión 1.7.0 de pubsublite.
Si se vuelve a intentar la publicación de un mensaje debido a errores de red o del servidor, se almacenará exactamente una vez. La idempotencia solo se garantiza dentro de la misma sesión. No se puede garantizar si el mismo mensaje se vuelve a publicar con un cliente publicador nuevo. No genera costos de servicio adicionales ni aumenta la latencia de publicación.
Habilita o inhabilita la publicación idempotente
La publicación idempotente está habilitada de forma predeterminada en las bibliotecas cliente de Pub/Sub Lite. Se puede inhabilitar con la configuración del cliente del publicador en la biblioteca cliente correspondiente.
Si la publicación idempotente está habilitada, el desplazamiento que se muestra en un resultado de publicación podría ser -1
. Este valor se muestra cuando el mensaje se identifica como un duplicado de un mensaje que ya se publicó correctamente, pero el servidor no tenía información suficiente para mostrar el desplazamiento del mensaje en el momento de la publicación.
Los mensajes que reciben los suscriptores siempre tienen un desplazamiento válido.
Soluciona problemas
Duplicados recibidos
Como la idempotencia se limita a una sola sesión, es posible que se reciban duplicados si recreas el cliente del publicador para publicar los mismos mensajes.
Un cliente suscriptor puede recibir el mismo mensaje varias veces si el servicio de Pub/Sub Lite asigna particiones automáticamente a los suscriptores (la configuración predeterminada). Es posible que un mensaje se vuelva a entregar a otro cliente de suscriptor cuando se produce una reasignación.
Error del publicador
El estado de una sesión del publicador se limpia en el servidor después de 7 días de inactividad. Si se reanuda una sesión después de este período, el cliente del publicador se cierra con un mensaje de error similar a "Fallo de la condición previa: Se esperaba que el mensaje tuviera el número de secuencia de publicación de…" y no acepta mensajes nuevos. Vuelve a crear el cliente del publicador para resolver este error.