Acionadores do Pub/Sub


O Pub/Sub do Google Cloud é um barramento de mensagens distribuído globalmente que é dimensionado automaticamente conforme necessário. Você pode acionar uma função sempre que uma nova mensagem do Pub/Sub for enviada para um tópico específico.

Importe os módulos necessários

Para começar, importe os módulos necessários para lidar com eventos do Pub/Sub:

const {onMessagePublished} = require("firebase-functions/v2/pubsub");
const logger = require("firebase-functions/logger");
from firebase_functions import pubsub_fn

Acione a função

Você deve especificar o nome do tópico do Pub/Sub que deseja acionar sua função e definir o evento no manipulador de eventos:

exports.hellopubsub = onMessagePublished("topic-name", (event) => {
@pubsub_fn.on_message_published(topic="topic-name")
def hellopubsub(event: pubsub_fn.CloudEvent[pubsub_fn.MessagePublishedData]) -> None:
   
"""Log a message using data published to a Pub/Sub topic."""

Acessar a carga útil da mensagem de publicação/assinatura

O payload da mensagem do Pub/Sub pode ser acessado no objeto de mensagem retornado para sua função. Para mensagens com JSON no corpo da mensagem do Pub/Sub, o SDK do Firebase para Cloud Functions tem uma propriedade auxiliar para decodificar a mensagem. Por exemplo, aqui está uma mensagem publicada com uma carga JSON simples:

gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}'

Você pode acessar uma carga de dados JSON como esta por meio da propriedade json :

  // Get the `name` attribute of the PubSub message JSON body.
  let name
= null;
 
try {
    name
= event.data.message.json.name;
 
} catch (e) {
    logger
.error("PubSub message was not JSON", e);
 
}
# Get the `name` attribute of the PubSub message JSON body.
try:
    data
= event.data.message.json
except ValueError:
   
print("PubSub message was not JSON")
   
return
if data is None:
   
return
if "name" not in data:
   
print("No 'name' key")
   
return
name
= data["name"]

Outras cargas não JSON estão contidas na mensagem do Pub/Sub como strings codificadas em base64 no objeto de mensagem. Para ler uma mensagem como a seguinte, você deve decodificar a string codificada em base64 conforme mostrado:

gcloud pubsub topics publish topic-name --message 'MyMessage'
// Decode the PubSub Message body.
const message = event.data.message;
const messageBody = message.data ?
     
Buffer.from(message.data, "base64").toString() :
     
null;
# Decode the PubSub message body.
message_body
= base64.b64decode(event.data.message.data)

Acessar atributos de mensagem

A mensagem do Pub/Sub pode ser enviada com atributos de dados definidos no comando de publicação. Por exemplo, você poderia publicar uma mensagem com um atributo name :

gcloud pubsub topics publish topic-name --attribute name=Xenia

Você pode ler esses atributos na propriedade correspondente do objeto de mensagem:

// Get the `name` attribute of the message.
const name = event.data.message.attributes.name;
# Get the `name` attribute of the message.
if "name" not in event.data.message.attributes:
   
print("No 'name' attribute")
   
return
name
= event.data.message.attributes["name"]