Cuando compilas tu sistema de Pub/Sub, la separación de la carga útil puede ayudarte que te conectas a otros sistemas que no cumplen con todos los requisitos del sistema de una la implementación estándar de extremos de envío de Pub/Sub.
Estos son algunos casos de uso potenciales para el desenvolvimiento de la carga útil:
- No quieres escribir código de análisis de mensajes específico de Pub/Sub para tus extremos de envío HTTP.
- Prefieres recibir los metadatos de los mensajes de Pub/Sub como encabezados HTTP en lugar de los metadatos en el cuerpo de la solicitud HTTP POST.
- Si quieres enviar mensajes de Pub/Sub y excluirlos los metadatos de Pub/Sub, por ejemplo, cuando se envían datos a un API de terceros.
Cómo funciona la separación de la carga útil
La separación de la carga útil es una función que quita de los mensajes de Pub/Sub todos los metadatos, excepto los datos del mensaje. Mediante el envío de datos sin procesar datos de los mensajes, los suscriptores pueden procesar el mensaje sin tener que cumplir los requisitos del sistema de Pub/Sub.
- Con el desenvolvimiento de la carga útil, los datos del mensaje se entregan directamente como el cuerpo HTTP.
- Sin la separación de la carga útil, Pub/Sub entrega un objeto JSON que contiene varios campos de metadatos del mensaje y un campo de datos del mensaje. En este caso, se debe analizar el JSON para recuperar los datos del mensaje y, luego, decodificar el base64.
Escribe metadatos
Después de habilitar la separación de la carga útil, puedes usar la opción de escritura de metadatos, que Agregar los metadatos del mensaje que se quitaron anteriormente al encabezado de la solicitud
- Los metadatos de escritura están habilitados. Vuelve a agregar los metadatos del mensaje al encabezado de la solicitud. También entrega los datos de mensajes decodificados sin procesar.
- Se inhabilitó la escritura de metadatos. Solo entrega los datos de mensajes decodificados sin procesar.
Los metadatos de escritura se exponen a través de Pub/Sub, el argumento --push-no-wrapper-write-metadata
de Google Cloud CLI y la propiedad de la API NoWrapper
.
De forma predeterminada, este valor es nulo.
Antes de comenzar
- Obtén información sobre las suscripciones y las suscripciones push de Pub/Sub. La separación de la carga útil solo se puede usar con suscripciones de envío.
- Aprende a configurar una suscripción de envío.
Ejemplo de mensajes unidos y separados
En los siguientes ejemplos, se ilustra la diferencia entre enviar un mensaje HTTP unido y no unido. En estos ejemplos, los datos del mensaje contienen
la cadena {"status": "Hello there"}
.
Para este ejemplo, se crea una suscripción con la separación de la carga útil
se habilita la función y publica un mensaje en mytopic
. Utiliza un orden
con un valor de some-key
y el tipo de medio se declara como
application/json
gcloud pubsub topics publish mytopic --message='{"status": "Hello there"}' --ordering-key="some-key" --attribute "Content-Type=application/json"
En las siguientes secciones, se muestra la diferencia entre un mensaje unido y no unido.
Mensaje unido
En el siguiente ejemplo, se muestra un mensaje estándar unido de Pub/Sub. En este caso, no se habilita el desenvolvimiento de la carga útil.
Publicar | Recepciones del extremo de envío |
---|---|
data="{"status": "Hello there"}" ordering_key="some-key" attributes= { {"Content-Type", "application/json"} } |
Content-Length: 361 Content-Type: application/json User-Agent: CloudPubSub-Google Host: subscription-project.uc.r.appspot.com { "message": { "attributes": { "Content-Type": "application/json" }, "data": "eyJzdGF0dXMiOiAiSGVsbG8gdGhlcmUifQ==", // Base64 - {"status": "Hello there"} "messageId": "2070443601311540", "message_id": "2070443601311540", "publishTime": "2021-02-26T19:13:55.749Z", "publish_time": "2021-02-26T19:13:55.749Z" }, "subscription": "projects/myproject/..." } |
Mensaje desatado con metadatos de escritura inhabilitados
En el siguiente ejemplo, se muestra un mensaje desenvuelto con la opción de metadatos de escritura inhabilitada. En este caso, no se incluyen los encabezados x-goog-pubsub-*
ni los atributos del mensaje.
Publicar | Recepciones del extremo de envío |
---|---|
data="{"status": "Hello there"}" ordering_key="some-key" attributes= { {"Content-Type", "application/json"} } |
Content-Length: 25 User-Agent: CloudPubSub-Google Host: subscription-project.uc.r.appspot.com {"status": "Hello there"} |
Mensaje sin unir con metadatos de escritura habilitados
En el siguiente ejemplo, se muestra un mensaje desenvuelto con la opción de metadatos de escritura habilitada. En este caso, se incluyen los encabezados x-goog-pubsub-*
y los atributos del mensaje.
Publicar | Recepciones del extremo de envío |
---|---|
data="{"status": "Hello there"}" ordering_key="some-key" attributes= { {"Content-Type", "application/json"} } |
x-goog-pubsub-subscription-name: "projects/myproject/..." x-goog-pubsub-message-id: "2070443601311540" x-goog-pubsub-publish-time: "2021-02-26T19:13:55.749Z" x-goog-pubsub-ordering-key: "some-key" Content-Type: application/json Content-Length: 12 User-Agent: CloudPubSub-Google Host: subscription-project.uc.r.appspot.com {"status": "Hello there"} |
Cómo configurar la separación de la carga útil
Puedes habilitar la entrega de notificaciones push de desenredo de carga útil para una suscripción mediante la página Detalles de la suscripción de la consola de Google Cloud, Google Cloud CLI o las bibliotecas cliente.
Console
En la consola de Google Cloud, ve a la página Suscripciones.
Haz clic en Crear suscripción.
En el campo ID de suscripción, ingresa un nombre.
Si quieres obtener información para asignar un nombre a una suscripción, consulta los Lineamientos para asignar un nombre a un tema o una suscripción.
Selecciona un tema del menú desplegable. La suscripción recibe mensajes del tema.
En Tipo de entrega, selecciona Envío.
Para habilitar la separación de la carga útil, selecciona Habilitar la separación de la carga útil.
Para conservar los metadatos de los mensajes en el encabezado de la solicitud, selecciona Escribir los metadatos (opcional). Debes habilitar esta opción para establecer un encabezado Content-Type para tus mensajes.
Especifica una URL de extremo.
Conserva todos los demás valores predeterminados.
Haz clic en Crear.
gcloud
Para configurar una suscripción con desencriptación de carga útil que incluya encabezados HTTP estándar, ejecuta el siguiente comando gcloud pubsub subscriptions create
:
gcloud pubsub subscriptions create SUBSCRIPTION \ --topic TOPIC \ --push-endpoint=PUSH_ENDPOINT \ --push-no-wrapper
Reemplaza lo siguiente:
SUBSCRIPTION
: Es el nombre o el ID de tu suscripción de extracción.TOPIC
: Es el ID del tema.PUSH_ENDPOINT
: Es la URL que se usará como extremo para esta suscripción. Por ejemplo,https://myproject.appspot.com/myhandler
--push-no-wrapper
: Entrega los datos del mensaje directamente como el cuerpo HTTP.
Para configurar una suscripción con desenredo de carga útil y controlar el uso de encabezados x-goog-pubsub-*
, ejecuta el siguiente comando:
gcloud pubsub subscriptions create SUBSCRIPTION \ --topic TOPIC \ --push-endpoint=PUSH_ENDPOINT \ --push-no-wrapper \ --push-no-wrapper-write-metadata
--push-no-wrapper-write-metadata
: Cuando es verdadero, escribe el Metadatos del mensaje de Pub/Sub ax-goog-pubsub-<KEY>:<VAL>
encabezados de la solicitud HTTP. Escribe el mensaje de Pub/Sub a los encabezados<KEY>:<VAL>
de la solicitud HTTP.
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.
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.
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.
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.
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.
Cómo establecer un encabezado de tipo de contenido en tu mensaje
Después de habilitar la separación de la carga útil, Pub/Sub no
establecer automáticamente un campo de encabezado de tipo de medio en tu solicitud. Si
no establezcas explícitamente un campo de encabezado Content-Type
, el servidor web
procesar tu solicitud podría establecer un valor predeterminado de
application/octet-stream
o interpretar la solicitud de forma inesperada.
Si necesitas un encabezado Content-Type
, asegúrate de declararlo explícitamente.
a la hora de la publicación
a cada mensaje publicado individual. Para ello, debes
En primer lugar, habilita Escribir metadatos. Este resultado de habilitar Escribir metadatos se muestra en los ejemplos proporcionados.
¿Qué sigue?
- Si tienes problemas con la separación de la carga útil, consulta Cómo solucionar problemas relacionados con la separación de la carga útil.