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"]